今天公司有个需求:就是对指定的数据表做主从复制,但是这个表每周都会生成一个
在主库上每周生成一个表名:money_change_20191021 这样的格式。然后需求只对:money_change 开头的表进行复制,其它表不复制。
办法一:不支持通配符:
replicate-do-db 设定需要复制的数据库(多数据库使用逗号,隔开) 不支持通配符
replicate-ignore-db 设定需要忽略的复制数据库 (多数据库使用逗号,隔开)
replicate-do-table 设定需要复制的表
replicate-ignore-table 设定需要忽略的复制表
replicate-do-table=ios_logs.money_change_%
可以支持,但是不能识别通配符,只支持全名表名称 像:replicate-do-table=ios_logs.money_change_1
办法二:支持通配符
replicate-wild-do-table 同replication-do-table功能一样,但是可以通配符
replicate-wild-ignore-table 同replication-ignore-table功能一样,但是可以加通配符
replicate-wild-do-table=ios_logs.money_change_%
可以支持,能很好的识别。
办法三:
支持热修改:CHANGE REPLICATION FILTER replicate_wild_do_table=('ios_logs.money_change_%');
使用过程中发现一些问题:
描述:在mysql 配置文件my.cnf 添加过
replicate-wild-do-table=ios_logs.money_change_%,ios_logs.item_change_%
配置复制过滤之后,数据不能同步了。
错误日志报错的
[Note] Slave SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000016, end_log_pos 4359; Could not execute Query event. Detailed error: Slave SQL thread ignored the query because of replicate-*-table rules; Error log throttle is enabled. This error will not be displayed for next 60 secs. It will be suppressed, Error_code: 1237
查看了mysql 官网 有网友已经提交了bug,但是直到5.7.27的版本都没有解决此问题