原理
多源复制,就是把多台主库的数据同步到一台从库服务器上,从库会创建通往每个主库的管道。
MySQL 5.7之前,只能实现一主一从、一主多从 或 多主多从的复制架构。
MySQL 5.7版本之后 支持 多主一从,搭建过程支持 GTID模式 和 binlog + position 方式。
架构图如下:
优势:
(1)可以集中备份,在从库上备份,不影响线上数据库正常运行。
(2)节约购买从库服务器 成本,只需一个从服务器即可。
(3)数据都汇总在一起,方便后期数据统计。
搭建过程
使用基于MySQL5.7版本的两主一从架构。
描述 | host |
---|---|
MasterA | 192.168.23.132 |
MasterB | 192.168.23.131 |
Slave | 192.168.23.133 |
注意事项:
MasterA、MasterB 不能拥有相同名称的数据库,否则会在从库上出现数据覆盖。
MasterA -> slave 与 MasterB -> slave 要使用不同的复制账号。
三台机器的数据库参数配置 与 GTID复制一致,保证 开启 GTID 功能,server-id 之间不一致,binlog 格式 为 row 模式。
从库需要的参数配置:
master_info_repository=table
relay_log_info_repository=table
对于多源复制,主从间复制信息需要记录到表中。
(1)分别在 MasterA 和 MasterB 上创建复制账号。
MasterA:
create user 'bak'@'192.168.23.%' identified by 'bak123456';
grant replication slave on *.* to 'bak'@'192.168.23.%';
flush privileges;
MasterB:
create user 'rep'@'192.168.23.%' identified by 'rep123456';
grant replication slave on *.* to 'rep'@'192.168.23.%';
flush privileges;
(2)分别在 MasterA 和 MasterB 上使用 mysqldump 导出需要备份的 库 数据。
示例使用 database_a 和 database_b。并传递到 从库 服务器上。
MasterA:
mysqldump -uroot -pliu123456 --master-data=2 --single-transaction database_a > database_a.sql
MasterB:
mysqldump -uroot -pliu123456 --master-data=2 --single-transaction database_b > database_b.sql
(3)从库恢复数据
mysql -uroot -pliu123456 < database_a.sql
mysql -uroot -pliu123456 < database_b.sql
(4)在从库上分别 配置 MasterA -> slave 和 MasterB -> slave 的同步过程
# MasterA -> slave
change master to
master_host='192.168.23.132',
master_user='bak',
master_password='bak123456',
master_auto_position=1 for channel 'm1';
# MasterB -> slave
change master to
master_host='192.168.23.131',
master_user='rep',
master_password='rep123456',
master_auto_position=1 for channel 'm2';
for channel 'm1'
、for channel 'm2'
表示创建 m1、m2 两个从库到主库的通道
(5)开启主从复制
方式一:
使用 start slave;
开启所有复制。
方式二:
使用 start slave for channel 'm1 或 m2'
来分别开启。
通过 show slave status for channel 'm1'\G
、show slave status for channel 'm2'\G
命令分别查看复制源 m1 和 m2 的主从同步状态。
也可以通过 performance_chema
库下 replication_connection_configuration
表来查看复制配置信息,replication_connection_status
表中的内容用来监控主从复制状态。
(6)验证数据是否同步
在 MasterA、MasterB 的同步库中 插入数据,然后 在 从库 slave 上查看 数据是否同步。
如同步正常,则搭建成功。
最后编辑:admin 更新时间:2023-01-06 14:07