我需要对我们的主/从/从MySQL集群执行一些维护。维护涉及优化三个表,其中至少一个被锁定了大约2个小时。每个表的优化操作在主表上运行到完成,然后在完成后通过二进制日志依次传播到从表。
在我看来,我现在有三个选择:
skip-networking重新启动主程序,运行优化程序,然后将其恢复在线,并允许奴隶追赶。我很难找到任何关于这方面的最佳实践的文档,或者关闭的确切行为,是否有人能够确认最好的方法来安全地使盒子离线来执行必要的工作?
清洁地执行操作比所花费的时间更重要,因为维护将在一夜之间进行。
MySQL版本是5.6,不幸的是它是一个较旧的版本,计划在不久的将来升级,但我暂时坚持它。复制方法是GTID。
非常感谢。
发布于 2022-06-20 19:54:29
首先,您真的需要运行OPTIMIZE TABLE吗?在大多数情况下,InnoDB保持其表的整洁程度,以至于不需要优化。如果您正在使用MyISAM,则应该出于各种原因将其转换为InnoDB。
如果优化是因为您做了一个很大的DELETE,那么下次就以一种不那么麻烦的方式执行删除,这可能消除了优化的需要。见http://mysql.rjweb.org/doc.php/deletebig。
好的,回到你的问题上。有一个复制设置,它阻止命令传播到副本。因此,在https://dev.mysql.com/doc/refman/8.0/en/set-sql-log-bin.html上执行以下操作:
# when logged in with sufficient privileges:
SET sql_log_bin = OFF;
OPTIMIZE TABLE ...;
SET sql_log_bin = ;然后遍历副本,每次一个:离线复制并手动运行OPTIMIZE。重新上网。
https://serverfault.com/questions/1102803
复制相似问题