slave会从master读取binlog来进行数据同步
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
MySQL复制过程分成三步:
1、master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events。
2、slave将master的binary log events 拷贝到它的中继日志(relay log)。
3、slave重做中继日志中的事件,将改变应用到自己的数据库中。MYSQL复制是异步的串行化的。
1、每个slave只有一个master
2、每个slave只能有一个唯一的服务器ID
3、每个master可以有多个salve
注意:复制的最大问题是 延时
mysql版本一致且后台以服务运行
主从都配置在[mysqld]结点下,都是小写
1.主从数据库版本最好一致
2.主从数据库内数据保持一致
主数据库:192.168.40.111 /linux
从数据库:192.168.40.112 /linux
找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下信息:
#master ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=mydb_210515
#设置logbin格式(默认STATEMENT)
binlog_format=STATEMENT
配置信息如下:
server-id=2
relay-log=mysql-relay
systemctl restart mysqld
注意:不管是windows 还是linux(systemctl stop firewalld) 建议关闭防火墙
授权:GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从服务器IP' identified by '密码';
use mysql
GRANT REPLICATION SLAVE ON *.* TO 'slave112'@'%' identified by 'Panghl$0';
查询master的状态
show master status;
注意:记录下File和Position的值
执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化!!!
修改auto.cnf中的UUID,保证唯一
- 编辑auto.cnf vim /var/lib/mysql/auto.cnf
-- 修改UUID的值 server-uuid=a402ac7f-c392-11ea-ad18-000c2980a208
-- 重启 service mysqld restart
如何重新配置:stop slave; reset master;
配置信息如下:
CHANGE MASTER TO MASTER_HOST='主机IP',
MASTER_USER='主机创建的用户名',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='File名字',
MASTER_LOG_POS=Position数字
启动slave从服务器复制功能
start slave;
查看主从是否搭建成功
show slave status\G
在主机新建库、新建表、insert记录,从机复制
create table test(
id int(10) PRIMARY KEY auto_increment,
t_name varchar(20)
)insert into test values(null,'1');
insert into test values(null,'2');
insert into test values(null,'3');
insert into test values(null,'4');
stop slave;
stop slave; reset master;