AWS RDS阅读repica失败问题

时间:2017-09-22 06:32:44

标签: mysql amazon-web-services innodb rds

我们在MySQL RDS服务器上创建了只读副本,并且我们的主实例已启用多可用区域,当我们尝试强制进行故障转移测试时,我们的只读副本的IO线程已停止并且我们得到了 Error 1236 fatal error我们的二进制日志已损坏。

为避免此副本失败,必须启用innodb_flush_log_at_trx_commit=1sync_binlog=1,但如果按照建议设置这些变量,则会使我们的写入操作降低50% - 60%。

有没有办法可以避免这种复制错误,而不是设置高于推荐值,如果有必要按照建议进行设置,那么请告诉我们如何改进写操作?

1 个答案:

答案 0 :(得分:0)

本答案一般适用于MySQL复制,而不仅仅适用于AWS。

如果你接近超出系统的容量,你需要对正在发生的事情进行一些认真的研究。

简短的回答是将多个交易(在可行的情况下)合并为一个。 innodb_flush_log_at_trx_commit=1涉及额外的'每笔交易结束时的fsync。因此,更少的交易 - >少I / O - >争议较少。

在我理解发生了什么之前,我和sync_binlog=0一起玩。当事情确实崩溃时,binlogs实际上并没有“腐败”#34;但是Slaves将指向一个不可能的位置"。这是因为在实际写入Master上的磁盘之前,位置信息已发送给Slave。解决方案很简单:将指针(在Slave上)移动到下一个binlog(在Master上)的开头(Pos = 0或4)。

我怀疑(没有任何真实证据)innodb_flatc对性能的影响比sync_binlog更大。

现在针对某些特定于AWS的内容。如果"多AZ"意味着每个磁盘写入正在写入两个不同数据中心的计算机,然后问题超出了您提出的两个设置。相反,如果它意味着Slave远离Master,那么它就像普通的MySQL Replication一样(对于这个Q& A)。