级联复制:即指的是按正常情况下,所有的从节点都是从主节点上同步数据,但是这回增大主节点的压力;故级联复制就是为了解决该情况的。多个从节中其中的一个从节点从主节点上同步数据,而后在于该子节点在于其他子节点进行同步数据。
实现原理简单如下
步骤解析:
需要在中间的从服务器上进行配置,实现中间slave节点能将master的二进制日志能在本机进行数据库更新,并且也同时更新本地的二进制日志,从而实现级联复制。
实现步骤大概:环境准备,主节点配置,中间节点配置,slave2节点配置
详细步骤如下:
一.安装环境:
这里用centos8,mysql8.0,一主两从架构。
主节点ip 10.0.0.110;slave1(中间节点)ip:10.0.0.112;slave2节点ip:10.0.0.114
并且关闭防火墙以及selinux(setenforce 0[临时关闭],systemctl disable --now firewalld)
为了便于区分,修改主机名为master ,slave1,slave2(hostname master|slave1|slave2)
二.主节点配置
编辑文件(/etc/my.conf.d/mysql-server.conf),设定全局唯一标识的id
[root@master ~]#vim /etc/my.conf.d/mysql-server.conf
server_id=110
[root@master ~]#systemctl enable --now mysqld #启动mysql
#登录mysql,mysql安装后默认的账户为root,密码为空.
创建一个用于备份的账号并且授权(repluser@‘10.0.0.%’ 密码为123456)
[root@master ~]#mysql
mysql>create user repluser@‘10.0.0.%’ identified by ‘123456’;
mysql>grant replication slave on *.* to repluser@‘10.0.0.%’;
#查看二进制日志位置
mysql>mysql>show master logs;
#创建备份并且将该备份文件复制到中间节点上(slave1)
[root@master ~]#mysqldump -uroot --single-transaction --master-data=1 -F -A > all.sql
[root@master ~]#scp allsql 10.0.0.112:
[root@master ~]#scp allsql 10.0.0.114:
三.中间节点(slave1)配置
[root@slave1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
server_id=112
read_only
log_bin #开启二进制日志功能,但是默认已开启。可省
log_slave_updates=off #级联复制的关键选项,但是在centos8系统中默认以及开起,为了方便看到效果,先将其关闭
[root@slave1 ~]#systemctl enable --now mysqld #启动mysql
#还原数据,但是需要在all.sql文件中的change master to 位置添加如下几行(该记号的格式可以通过获取帮助获得help change master to)
[root@slave1 ~]#vim all.sql
chang master to
MASTER_HOST=‘10.0.0.112‘,
MASTER_USER=‘ldl1‘,
MASTER_PASSWORD=‘123456‘,
MASTER_PORT=3306,
...
#还原数据时,如果不希望该操作记录在日志中,可将该功能暂时关闭。
[root@slave1 ~]#mysql
mysql>set sql_log_bin=off; #关闭二进制日志功能
mysql>source /root/all.sql
mysql>show master logs; #记录二进制位置,给第三个节点使用
mysql>set sql_log_bin=on;
mysql>start slave; #启动线程
mysql>show slave status\G; #查看线程开启情况以及是否有报错
四.从节点(slave2)配置
[root@slave2 ~]#vim /etc/my.cnf.d/mysql-server.cnf
server_id=114
read_only
log_bin #开启二进制日志功能,但是默认已开启。可省
[root@slave2 ~]#systemctl enable --now mysqld #启动mysql
[root@slave2 ~]#vim all.sql
change master to
MASTER_HOST=‘中间节点的ip‘,
MASTER_USER=‘repluser‘,
MASTER_PASSWORD=‘123456‘,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘中间节点的二进制日志文件‘,
MASTER_LOG_POS=中间节点的二进制文件位置;
[root@slave2 ~]#mysql < all.sql
[root@slave2 ~]#mysql -e ‘start slave‘
五.测试
在主节点上创建一个数据库db1
在中间节点查看是否生成
然后再从节点slave2查看。
如果为再slave2上未查看到db1数据库,则修改中间节点的配置文件后重新新的服务。在做同样操作的测试
[root@slave1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
log_slave_updates=on