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

时间:2014-11-18 08:09:27

标签: amazon-web-services database-replication amazon-rds

我有一个亚马逊rds实例数据库,我正在使用只读副本进行分析。但是,每周左右,只读复制副本会因复制错误而崩溃。我已经尝试按照这篇帮助文章(http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_skip_repl_error.html)查看slave状态并跳过复制错误但是,我只能通过摆弄和创建新的只读副本来恢复它。但是,由于多种原因,这会成为问题,因为外部服务依赖于初始只读副本。

主数据库很好,但似乎一些完整性错误导致只读副本崩溃而无法恢复。

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

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

有没有办法可以配置此只读副本以跳过所有错误?我只想弄清楚如何让它更稳定。谢谢!

3 个答案:

答案 0 :(得分:3)

在理解导致错误的原因,修复底层问题之后,你永远不应该跳过复制错误 纠正了主副本之间的任何数据不一致。

对于您跳过的每个错误,主数据集和副本数据集之间的差异会增大,任何分歧都是不可接受的。

除了创建新的副本实例并丢弃旧副本之外,您没有其他选择。如果在新的停止上发生复制错误,请找出原因,并修复配置或应用程序中未正确执行的操作以导致错误。

除非你对MySQL复制的内部有一个透彻的了解,否则在RDS for MySQL上删除复制错误应被视为紧急止损措施...因为在正确的设置中,它们很少见。

答案 1 :(得分:2)

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

  

Amazon RDS for MySQL只读副本需要事务存储   引擎,仅支持InnoDB存储引擎。   非事务性MySQL存储引擎(如MyISAM)可能会阻止   阅读副本按预期工作。但是,如果您仍然选择   要将MyISAM与Read Replicas一起使用,我们建议您观看亚马逊   CloudWatch“副本滞后”指标(可通过AWS Management获得)   小心地控制台或Amazon CloudWatch API并重新创建Read   由于复制错误,副本应该落后。相同   注意事项适用于临时表和任何其他表的使用   非交易引擎。

我们使用的是MyISAM。但是,由于其他原因,我们已从InnoDB表切换。所以我们在这里没有得到答案,因为看起来InnoDB存储引擎给我们带来了一个问题,MyISAM工程给了我们另一个问题。我们将不得不深入探讨这一点,但似乎我们需要一个事务存储引擎来使只读副本一致且正常地工作。

答案 2 :(得分:1)

我通过创建一个像这样的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 */
相关问题