基于GTID的主从实践系列之⑤多源复制

本质:多主一从

运用场景:从库用于汇总数据

架构

主库1:172.17.100.106

主库2:172.17.100.107

从库:172.17.100.108

情况稍微有点复杂:106-108这3个库曾经都是100这个主库的从库,之后经过改造107和108又成为了106的从库,现在需要把108改成106和107的从库

多源复制的搭建

#分别登录2个主库

106库信息如下

107库信息如下

在106库创建账户并授权

grant replication slave on *.* to repl@'%' identified by 'repl';

执行106库上qimo这个数据库的导出

mysqldump -S /tmp/mysql3306.sock -uroot -p密码 -d qimo > qm.sql

在107库创建账户并授权

grant replication slave on *.* to bak@'%' identified by 'bak';

执行106库上sbtest这个数据库的导出

mysqldump -S /tmp/mysql3306.sock -uroot -p密码 -d sbtest > sb.sql

同时将2个sql文件拷贝到108库服务器上,初始化108数据库

108库创建repl和bak账号,并授权

grant replication slave on *.* to repl@'%' identified by 'repl';

grant replication slave on *.* to bak@'%' identified by 'bak';

创建sbtest和qimo2个数据库

导入qimo库

mysql -uroot -p密码 qimo < qm.sql

执行reset master,再导入sbtest库

mysql -uroot -p密码 sbtest < sb.sql

★设置GTID_PURGED信息★

严格来说,这里应该是找到sb.sql和qm.sql,查看这2个sql文件第24行的GTID_PURGED信息;(下图是107库导出的sb.sql里面的信息)

(由于我在导出106库之前执行了reset master,所以106导出的qm.sql里面并没有GTID_PURGED信息,106的通过前面的show master status来获取)

这里把106的GTID_PURGED信息称为106GP,对应的107的就是107GP

所以在从库上这一步操作应该是

set global gtid_purged='106GP,107GP';

从上面2个图中可以发现106GP和107GP中都有“867834d3-5437-11e8-aba6-005056ba2eba”这个UUID对应的GTID,在这里需要取比较大的一个,也就是867834d3-5437-11e8-aba6-005056ba2eba:1-292003。

我之前在这里取了867834d3-5437-11e8-aba6-005056ba2eba:1-291992,结果在106库上对qimo库执行更新时,从库就出现了1032的报错


★综合106的GP和107的GP,从库上的操作如下★

reset master;

set global gtid_purged='850662d4-6eb6-11e8-bda3-005056ba38bb:1-6,867834d3-5437-11e8-aba6-005056ba2eba:1-292003,e7fab815-8339-11e8-a215-005056ba0d70:1-9';

#接下来将从库分别指向2个主库,与普通的GTID搭建不一样的是要设置一个通道

change master to master_host='172.17.100.106',master_user='repl',master_password='repl',master_port=3306,master_auto_position=1 for channel 'ch1';

change master to master_host='172.17.100.107',master_user='bak',master_password='bak',master_port=3306,master_auto_position=1 for channel 'ch2';

start slave;

show slave status \G

这里应该会把2个通道的情况都显示出来,分别为双yes则表示设置成功。

也可以单独调试,比如对106主库的暂停

stop slave for channel 'ch1'\G

show slave status for channel 'ch1'\G

start slave for channel 'ch1'\G


报错一例

设置从库的gtid_purged的时候,没有写完整,只写了其中某一个主库的,比如写成下面这样

set global gtid_purged='850662d4-6eb6-11e8-bda3-005056ba38bb:1-6,867834d3-5437-11e8-aba6-005056ba2eba:1-292003';

(或者更弱智的只写了一行set global gtid_purged='850662d4-6eb6-11e8-bda3-005056ba38bb:1-6';)

则会出现1236的报错

你可能感兴趣的:(基于GTID的主从实践系列之⑤多源复制)