我有一个亚马逊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.....
有没有办法可以配置此只读副本以跳过所有错误?我只想弄清楚如何让它更稳定。谢谢!
答案 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 */