我使用 amazon rds 并有一个跨区域副本。当我进行一些架构更改时,我的只读副本给了我这个错误并且复制停止了。
消息:读取副本复制错误 - SQLError:1146,原因:错误表 phppoint_koreannoona.phppos_items 在查询中不存在。默认数据库:DB_NAME;。查询:ALTER TABLE phppos_items DROP COLUMN aaatex_qb_item_name
什么会导致这个?桌子在主人身上。我的迁移确实删除了该字段,但从属中缺少整个表。
我不得不重建奴隶。
让我们进入事实,然后我们将不得不进入推测:
ALTER TABLE
您对不存在的表执行了查询。在运行更改时,您的表存在于主服务器上(否则,它不会通过 binlog 并尝试在副本上执行),但在副本上不存在。这使得复制中断,因为它不能以一致的方式继续。什么可以使表存在于主服务器上而不存在于副本上?几个选项:
发生了其他事情导致副本不同步。确切的原因在很大程度上取决于环境、配置和应用程序。一些例子包括:
非崩溃安全配置中的副本崩溃
复制坐标更改不当或其他维护导致复制错误
使用了不安全的写语句或配置,导致不一致
使用了过滤,导致数据不一致
在禁用复制/binlog 的情况下在主服务器上运行查询
如何解决?
修复副本不一致的最安全方法是从头开始重新创建它。如果单个表的写入量较低,您可以相对轻松地复制单个表并对其进行同步,但这不会阻止您在其他表上出现其他数据漂移。
如何防止这种情况再次发生?
最重要的部分是在地方进行检查以及早发现问题。pt-table-checksum或简单的转储和比较等工具可以让您更早地检测到差异。根据给出的信息,不可能确切地说出是什么原因造成的,因为 mysql 配置是否安全取决于具体的设置。一些一般性建议: