之前写到我们只是同步了一个db库,如果说我们打算同步两个、多个甚至全库需要如何操作呢,这里自己也在此研究了下,大佬们可以借鉴下
1、同步2个或者多个库
其实这种和同步1个库没有太大区别,还是用mydumper工具来实现吧
1.1 因为mydumper可以同时导出多个库,在导出的时候会生成一个文件metadata,而这个文件里面就包含我们需要的主从同步的位置点信息
1.2 先清理之前的主从信息
stop slave;
reset slave all;
show slave status
1.2 同时导出两个库出来
不过mydumper 比较蛋疼的一点是 -B 不能同时指定多个库,只能反向思维,不去过滤哪些库,这里我就导两个jc_data和jc_test了,去掉不导入的
mydumper --user=jc-all --host=172.xx.48.6 --password=password --port=3306 -t 4 --regex '^(?!(mysql|test|sysdb))' --outputdir=./jc-all
导入:
myloader --user=root --password=xxx -d ./jc-all
1.3、过滤库
这里我们需要注意的是,如果过滤多个库,不仅仅要导出的做过滤,还需要在从库配置文件上做下过滤,无论是mysql还是maridb涉及的过滤参数是以下几个
#过滤库
Replicate_Do_DB:(白名单)
Replicate_Ignore_DB:(黑名单)
#过滤表
Replicate_Do_Table: (白名单)
Replicate_Ignore_Table: (黑名单)
#模糊匹配
Replicate_Wild_Do_Table: (白名单)
Replicate_Wild_Ignore_Table: (黑名单)
1.4、上述都配置好了之后,接着起主从
还是需要去导出的sql文件中哪metadata的元数据,然后拿到gtid信息
1.4.1、SET GLOBAL gtid_slave_pos='0-677963481-395618'或者CHANGE MASTER TO MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=96278680;(这里的位点和截图位点不一致是因为小弟我跑了很多弯路,就没去截图记录当前的这个位点~~)
1.4.2、主从同步命令
change master to
master_user = 'jc-all',
master_password = "password",
master_host = '172.xx.48.6',
master_port = 3306,
master_use_gtid = slave_pos;
start slave;
最后在验证下,新建库未同步到目标从库,同时两个库的数据可以正常同步
2、同步整库
这里就不在重复上面的步骤了,只需要我们导出的时候是整库就可以了
注意:如果是按照上面来的,需要把配置文件的过滤库的条件去掉哈
(sysdb这个库是云上maridb实例自有的,用来保持自身的主备实例心跳检测的,可不用迁移)
导出:mydumper --user=jc-all --host=172.xx.48.6 --password=password --port=3306 -t 4 --outputdir=./jc-all
导入:myloader --user=root --password=password -d ./jc-all
(这里因为自建的maridb会和云上有重复的库mysql,可以过滤掉或者导入到本地也可以,mydumper导出全库的时候默认不导出information_schema和performance_schema)
这种报错可以忽略