maridb自建从库(2)

2020-07-17 11:15:10 浏览数 (2)

之前写到我们只是同步了一个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)

这种报错可以忽略

0 人点赞