mysql主从复制原理
1.首先master将数据更新记录到二进制binlog文件
2.slave通过I/O线程向master请求binlog日志文件指定位置之后的内容
3.master接收到slave的io请求之后,就会从binlog相应的位置点开始,给slave传日志
4.slave接收到日志后,会写入本地的relay log中继日志中
5.slave通过sql线程读取中继日志的内容,在数据库中执行相应的操作,到此为止,master和slave上的数据一致,之后slave服务器进入等待状态,等待master的后续更新
系统环境
服务器 | IP地址 | 操作系统 | mysql版本 |
Mysql_smater | 10.44.*.* | Centos7 64位 | 5.6.43 |
Mysql_slave1 | 10.44.*.* | Centos7 64位 | 5.6.43 |
Mysql_slave2 | 10.44.*.* | Centos7 64位 | 5.6.43 |
mysql是通过源码编译安装,配置文件:/etc/my.cnf,测试同步数据库:test
一、在master上操作
(1)修改master的配置文件,在[mysqld]下面添加如下配置内容
log_bin=mysql-bin
server-id=1
binlog_do_db=test
(2)如果开启了firewalld防火墙,需要开放mysql端口
(3)重启mysql
service mysqld restart;
(4)创建test数据库,并导入表结构
(5)查看bin-log和master状态
mysql> show variables like "log_bin";
mysql> show master status;
(6)创建同步用户
mysql>grant replication slave on *.* to 'lxmtest1'@'10.44.2.120' identified by 'lxmtest1123456';
mysql>grant replication slave on *.* to 'lxmtest1'@'10.44.0.70' identified by 'lxmtest1123456';
mysql> select user,host from mysql.user;
二、salve1、salve2从库服务器上操作
(1)在两台从库的数据库上创建test数据库,并创建表结构
(2)修改slave的配置文件,在[mysqld]下面添加如下配置内容
server-id=2 #slave ID,另一台配置成3
relay_log=/var/lib/mysql/mysql-replay-bin.70 #必须指定至少其中一台,不然会报错,默认的会被另一台从库占用
replicate-do-db=test #指定同步的数据库
(3)重启两台slave的mysql
service mysqld restart
(4)分别在两台slave上创建主从同步
mysql>change master to master_host='主服务器ip', master_port=3306, master_user='lxmtest1', master_password='lxmtest1123456', master_log_file='mysql-bin.000001', master_log_pos=0;
mysql>start slave;
mysql>show slave status\G
测试
(1)在master上导入的数据
(2)查看master和slave状态的Position是否一致