主从复制之莫名少表

时间:2022-10-03 09:34:07

问题想象:

最近在做一个项目的生产环境迁移,采用的是《源-中继-目标》这种架构,在测试阶段,开发反应一个问题:目标端的测试数据少了两张表。第一反应是:这两张表肯定是最近新增的表。因为我们的测试数据5天前就已经停止同步生产库,最近新增的表是不会出现在测试环境的。过不期然,这两张表是新增的。于是从中继节点(中继节点是一直在同步源端生产数据的)导出一份数据再入到测试环境。检查后发现,缺少的表还是不存在。检查了中继几点到源端的主从同步,状态ok。检查了源端本身的主从复制状态也是ok。但是表就是少了。

问题原因:

后经排查发现,中继节点的主库是源端集群的从库,而该从库没有打开log_slave_updates  参数

mysql> show variables like '%log%slave%';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| log_slave_updates         | OFF   |
| log_slow_slave_statements | OFF   |
+---------------------------+-------+
2 rows in set (0.00 sec)

这样的设置,会导致源端主库的操作不会同步映射到从库的binlog,也就没法同步到中继节点。这就出现了上述所说的情况。