背景:
之前完成了一主一从的 MariaDB 主从复制架构,但是有的时候,可能期望有一个后备的 MariaDB 节点,
只用作备份存储数据,不需要对外提供服务。为了实现该功能,我们可以在之前的一主一从架构上进行调整,
即将从节点Slave1(192.168.32.17)的二进制日志文件打开,然后给它配置一个远程同步数据用户,
接着使用一台新的服务器做为从服务器的Slave2,同步从服务器的数据即可
准备条件:
三台主机都安装了10.2.32-MariaDB 版本必须一样
三台主机
一台主服务器(192.168.6.129) master
一台级联从服务器(192.168.6.130) slave1
一台备用的从服务器(192.168.6.131) slave2
Reset slave all;
Stop slave;
Reset master
实验开始:
1. 在主服务器(192.168.6.129)
配置
vim /etc/my.cnf
[mysqld]
server-id=1
log-bin
mysql> grant replication slave on *.* to repluser@'192.168.6.%' identified by 'centos';
mysql>show master logs; 查看二进制文件
备份数据库
mysqldump -A --single-transaction --master-data=1 -F -uroot -p123456 > /data/all.sql
传送数据库备份文件到192.168.6.130 服务器上
scp /data/all.sql 192.168.6.130:/data/
2. 在级联从服务器上(192.168.6.130)
配置文件 vim /etc/my.cnf
server-id=2
log-bin
log_slave_updates *非常重要的参数
read-only
重启数据库
Systemctl restart mariadb.server
修改 /data/all.sql 上的数据库备份文件
将CHANGE MASTER TO MASTER_LOG_FILE='Centos7-bin.000002', MASTER_LOG_POS=389; 修改成一下内容
vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE='Centos7-bin.000005',
MASTER_LOG_POS=389;
导入修改好的数据库备份文件
mysql -uroot -p123456 < /data/all.sql
没启动start slave 之前
启动后
备份级联服务器上数据库
mysqldump -A --single-transaction --master-data=1 -F -uroot -p123456 > /data/all.sql
传送备份数据库文件给最后的服务器(192.168.6.131)
scp /data/all.sql 192.168.6.131:/data/
三:
在最后的服务器上(192.168.6.131)
修改配置文件
Vim /etc/my.cnf
[mysqld]
server-id=3
read-only
重启数据库
Systemctl restart mariadb.server
修改 /data/all.sql 上的数据库备份文件
将CHANGE MASTER TO MASTER_LOG_FILE='Centos7-bin.000002', MASTER_LOG_POS=389; 修改成一下内容
vim /data/all.sql
CHANGE MASTER TO
MASTER_HOST='级联从服务器IP ',
MASTER_USER='repluser',
MASTER_PASSWORD='centos',
MASTER_PORT=3306,
MASTER_LOG_FILE=' Centos7-bin.000005', MASTER_LOG_POS=389;
导入修改好的数据库备份文件
mysql -uroot -p123456 < /data/all.sql
未启动之前
启动后:
注: 若遇到最后的服务器无法连接,可能是日志文件索引点导致的,可以通过
Stop slave;
Reset slave;
Start slave;
或者:
1.打开主服务器,进入mysql
2.执行flush logs;//这时主服务器会重新创建一个binlog文件;
3.在主服务上执行show master slave \G;显示如下:
4.来到从服务器的mysql;
5.stop slave;
6.change master to master_log_file=‘mysql-bin.000012’,master_log_pos=154;//这里的file和pos都是上面主服务器master显示的。
7.start slave;//这时候就应可以了
8.show slave status \G;
参考网址:
https://blog.csdn.net/weixin_45651006/article/details/103316771?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159617938219195162507691%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159617938219195162507691&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v3~pc_rank_v3-1-103316771.pc_ecpm_v3_pc_rank_v3&utm_term=mariadb+级联复制&spm=1018.2118.3001.4187