日期:2014-05-16  浏览次数:20761 次

MySQL部分表复制配置下存在的运维风险、原因及一种方案

??大家都知道 replicate-wild-do-table可以配置只同步部分表,由于其支持通佩符,带来便利。但也存在一些风险。

?

??? 问题描述:

??? 假设MS两个MySQL Server, S设置为M的从库,且设置replicate-wild-do-table=test.a%.

??? 此时在M库按照如下顺序操作:

1)????? create table a1(f int);

2)????? alter table a1 rename to b1;

3)????? alter table b1 rename to a1;

??? 此时分别在MSshow tables发现,M中有a1, S中只有b1.

??? 原因是步骤3没有在S中重放。

?

??? 相关代码:

??? 在主从过程中,从库S会将主库的所有命令都写入本地日志,但在执行之前会先判断是否符合replicate[-wild]-do-table的条件。

??? 从库判断表名是否符合同步条件则是在rpl_filter.cc:tables_ok中,判断的输入是thd.lex.query_tables 而对于