首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql rds读取副本复制错误

mysql rds读取副本复制错误
EN

Database Administration用户
提问于 2019-04-10 16:41:04
回答 1查看 2.7K关注 0票数 1

我使用亚马逊rds,并有一个跨区域复制。当我做一些模式更改时,我的read副本给了我这个错误,并且停止了复制。

消息:读取复制复制错误- SQLError: 1146,原因:在查询中不存在错误表phppoint_koreannoona.phppos_items。默认数据库: DB_NAME;查询: ALTER phppos_items DROP列aaatex_qb_item_name

是什么导致的?桌子在主人那里。我的迁移确实删除了这个字段,但是整个表在奴隶中丢失了。

我不得不重建奴隶。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-04-15 08:32:49

是什么导致的?

让我们深入了解事实,然后再进行推测:

代码语言:javascript
复制
Table phppoint_koreannoona.phppos_items doesn't exist on query

您对一个不存在的表执行了一个ALTER TABLE查询。在运行alter时,您的表在主服务器上存在(否则,它不会遍历binlog并试图在副本上执行),但是在副本上不存在。这使得复制中断,因为它不能以一致的方式继续。

是什么使一个表存在于主程序上而不是副本上?若干备选方案:

  • 桌子根本就不在那。为了创建一个副本,RDS会对主服务器进行快照并将其传输出去。根据何时或如何完成,复制可能是不一致的(例如,与正在运行的模式更改相比,我对同时完成的快照表示怀疑)。也许它只是一个内存表,但没有正确地传输到磁盘上?也许是在一个特定的引擎中,它与交易性(MyISAM)有问题。
  • 桌子在那里,但不知怎么地被删除了。
  • 其他的一些事情导致了复制品的不同步。其确切原因将在很大程度上取决于环境、配置和应用。一些例子包括:
    • 非崩溃安全配置中副本的崩溃。
    • 复制坐标被不适当地更改,或者其他维护在复制时出现错误。
    • 使用不安全的写语句或配置,这会导致不一致。
    • 使用过滤,导致数据不一致。
    • 在禁用复制/binlog的主服务器上运行查询。

如何修复?

修复副本上不一致的最安全的方法是从头开始重新创建它。如果表的写入量较低,则可以复制单个表并相对容易地同步它,但这不会阻止其他表上的其他数据漂移。

如何防止这种情况再次发生?

最重要的部分是在一些地方进行检查,以便及早发现问题。pt表-校验和或简单转储和比较等工具可能允许您更早地检测差异。由于mysql的配置是否安全取决于具体的设置,在提供了信息之后,不可能确切地说明是什么原因造成的。一些一般性建议:

  • 尝试使用基于行的复制,它通常对糟糕的配置/查询具有更强的抵抗力。
  • 检查日志上的“binlog不安全语句”警告
  • 检查日志,以查看由于维护不当而导致的复制更改。
  • 确保副本确实是只读的,并且它们不能被写出来或在带外操作。
  • 在所有表上使用innodb,以及对副本进行抗崩溃配置。
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/234481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档