繁体   English   中英

Amazon RDS 只读副本 — 跳过复制错误

[英]Amazon RDS Read Replica — Skipping Replication Errors

我有一个 amazon rds 实例数据库,我正在使用只读副本进行分析。 但是,每周左右,只读副本都会因复制错误而崩溃。

我已经尝试按照此帮助文章查看从属状态并跳过复制错误,但是,我只能通过摆弄并创建新的只读副本来恢复它。

由于外部服务依赖于初始只读副本,这有多种原因。

主数据库没问题,但似乎某些完整性错误会导致只读副本崩溃且无法恢复。

目前,我的只读副本具有以下参数:

Replication State: Error
Replication Error: Error 'Cannot add or update a child row: a foreign key constraint fails.....

有没有办法配置这个只读副本来跳过所有错误? 我只是想弄清楚如何使它更稳定。 谢谢!

在您了解导致错误的原因、修复潜在问题并纠正主副本之间的任何数据不一致之前,您永远不应该跳过复制错误。

每跳过一个错误,主数据集和副本数据集之间的差异就会增加,任何差异都是不可接受的。

您别无选择,只能创建一个新的副本实例并丢弃旧的实例。 如果新的复制错误发生,请停止,找出原因,并修复您的配置或应用程序中导致错误的错误。

跳过 RDS for MySQL 上的复制错误应被视为紧急权宜之计,除非您对 MySQL 复制的内部结构有透彻的了解……因为在正确的设置中,它们很少见。

事实证明,问题的根源在于存储引擎。 来自亚马逊常见问题解答: http : //aws.amazon.com/rds/faqs/#130

Amazon RDS for MySQL Read Replicas 需要事务存储引擎,并且仅支持 InnoDB 存储引擎。 非事务性 MySQL 存储引擎(例如 MyISAM)可能会阻止只读副本按预期工作。 但是,如果您仍然选择将 MyISAM 与只读副本一起使用,我们建议您仔细观察 Amazon CloudWatch“副本滞后”指标(可通过 AWS 管理控制台或 Amazon CloudWatch API 获得)并在由于以下原因落后时重新创建只读副本复制错误。 相同的考虑适用于临时表和任何其他非事务性引擎的使用。

我们使用的是 MyISAM。 但是,由于其他原因,我们已经从 InnoDB 表切换了。 所以我们在这里还没有完全的答案,因为似乎 InnoDB 存储引擎给了我们一个问题,而 MyISAM 引擎给了我们另一个问题。 我们必须深入研究才能解决这个问题,但似乎我们需要一个事务存储引擎来使只读副本一致且正确地工作。

我通过创建一个像这样的 mysql 事件调度程序来解决它:

CREATE EVENT repl_error_skipper 
ON SCHEDULE 
EVERY 15 MINUTE
COMMENT 'Calling rds_skip_repl_error to skip replication error'
Do
CALL mysql.rds_skip_repl_error;
/*also you can add other logic */

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM