数据库实现级联复制

级联复制:即指的是按正常情况下,所有的从节点都是从主节点上同步数据,但是这回增大主节点的压力;故级联复制就是为了解决该情况的。多个从节中其中的一个从节点从主节点上同步数据,而后在于该子节点在于其他子节点进行同步数据。

实现原理简单如下

 步骤解析:

需要在中间的从服务器上进行配置,实现中间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

  

一如IT深似海,从此妹子是路人; 只要学不死,就往死里学;
原文地址:https://www.cnblogs.com/ldlx/p/14438238.html