级联复制就是主从架构中,将复制的重担移动至第一个从服务器节点,从AB,AC变成了A-->B-->C,不一样的是B既要接受来自A的操作记录,还要将其记下传给C
实验环境
主机名/IP | 角色 | 系统 |
server01/192.168.1.101 | mysql-master | ubuntu22.04 |
server02/192.168.1.102 | mysql-slave-master | ubuntu22.04 |
server03/192.168.1.103 | mysql-slave | ubuntu22.04 |
mysql-master配置
锁表,禁止备份途中进行写操作
mysql -u root -p
flush tables with read lock;
exit;
备份数据库(一般只备份业务数据库)
mysqldump -u root -p --databases employees > /tmp/bak.sql
解锁
mysql -u root -p
unlock tables;
创建同步用户,赋予复制权限
create user 'slave'@'192.168.1.102' identified by 'wakamizu';
grant replication slave on *.* to 'slave'@'192.168.1.102';
flush privileges;
exit;
开启二进制日志,开放监听接口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
log_bin=mysql-bin
server-id=1
#设置监听地址
bind-address=0.0.0.0
#防止主键重复
binlog_format=mixed
#强制binlog与磁盘同步
sync_binlog=1
重启服务器
systemctl restart mysql
查看master状态,并且记录File和Position值
mysql -u root -p
show master status \G;
mysql-slave-master配置
将mysql-master的备份数据复制过来,然后导入数据库
mysql -u root -p < /tmp/bak.sql
开启二进制日志
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=2
log-bin=mysql-bin
log-slave-updates=1
#将从mysql-master接收到的数据写入自己的二进制日志中
relay_log=mysql-relay-bin
bind-address=0.0.0.0
replicate-do-db=employees
重启服务器
systemctl restart mysql
配置主从复制
mysql -u root -p
change master to \
master_host='192.168.1.101', \
master_user='slave', \
master_password='wakamizu', \
master_log_file='mysql-master服务器file名', \
master_log_pos=mysql-master服务器position值, \
get_master_public_key=1;
注意:如果slave用户的身份验证插件是caching_sha2_password,则需要指GET_MASTER_PUBLIC_KEY=1,以获取主服务器的RSA公钥进行身份验证增强连接的安全性,可用语句:select User,plugin from mysql.user where User="slave" 查看
开启slave
start slave;
查看复制状态
show slave status \G;
一主一从架构测试正常后,停止slave并锁表
stop slave;
flush tables with read lock;
查看master状态,并且记录File和Position值
show master status \G;
备份数据库(一般只备份业务数据库)
mysqldump -u root -p --databases employees > /tmp/bak.sql
解锁
mysql -u root -p
unlock tables;
创建同步用户,赋予复制权限
create user 'slave'@'192.168.1.103' identified by 'wakamizu';
grant replication slave on *.* to 'slave'@'192.168.1.103';
flush privileges;
exit;
mysql-slave配置
将mysql-slave-master的备份数据复制过来,然后导入数据库
mysql -u root -p < /tmp/bak.sql
开启二进制日志
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id=3
relay_log=mysql-relay-bin
bind-address=0.0.0.0
replicate-do-db=employees
重启服务器
systemctl restart mysql
配置主从复制
mysql -u root -p
change master to \
master_host='192.168.1.102', \
master_user='slave', \
master_password='wakamizu', \
master_log_file='mysql-slave-master服务器file名', \
master_log_pos=mysql-slave-master服务器position值, \
get_master_public_key=1;
开启slave
start slave;
查看复制状态
show slave status \G;