Symmetric DS能否将MySQL企业节点的删表操作同步至门店节点?
解决MySQL双向同步场景下DROP TABLE同步失效问题
排查同步失效原因
- 检查企业节点binlog是否记录DROP TABLE事件:
执行SHOW BINLOG EVENTS IN 'mysql-bin.xxxxxx' LIMIT 100;(替换为实际binlog文件名),确认是否存在对应DROP TABLE的事务记录。 - 检查门店节点复制状态:
执行SHOW SLAVE STATUS\G,查看Slave_IO_Running、Slave_SQL_Running是否均为Yes,同时检查Last_SQL_Error是否有报错信息,确认是否存在事务跳过的情况。 - 检查同步过滤规则:
确认双向同步配置中是否存在replicate_do_db、replicate_ignore_db等规则,导致DROP TABLE语句被过滤;部分第三方同步工具会默认忽略DDL,需确认是否开启DDL同步开关。
强制同步DROP TABLE的可行操作
- 手动执行DDL并恢复同步
- 暂停门店节点复制:
STOP SLAVE; - 手动执行删除表语句:
DROP TABLE IF EXISTS customers; - 恢复复制:
START SLAVE; - 再次执行
SHOW SLAVE STATUS\G确认同步正常,无报错。
- 暂停门店节点复制:
- 修正同步工具命令执行方式
- 若使用
send-sql命令,需确保指定正确目标节点及完整语法,例如:send-sql --target=store_node "DROP TABLE IF EXISTS customers;"(需根据工具实际参数调整) - 执行命令后查看同步工具的本地日志,确认命令已被目标节点接收并执行。
- 若使用
- 重新同步触发器
- 完成表删除后,执行
sync-triggers命令重新同步双向同步的触发器规则,避免后续数据同步出现异常。
- 完成表删除后,执行
可行性说明
双向同步场景下同步DROP TABLE操作完全可行,但需注意:
- 执行前需确保两个节点的
customers表数据已完全同步,避免数据丢失; - 基于GTID的复制需确认企业节点的DROP TABLE事务GTID已被门店节点执行,可通过
SELECT @@GLOBAL.GTID_EXECUTED;对比两个节点的GTID集合; - 部分同步工具会对DDL做循环复制防护,需确认工具配置是否允许DDL跨节点同步,避免规则拦截。
内容的提问来源于stack exchange,提问作者realSequence
相关产品推荐
相关产品推荐

