MySQL复制重新同步

为了备份目的,我想build立一个零维护的免提MySQL复制scheme。

但是,我的经验,这些事情不可避免地最终会失去同步。 也许是由于开发者滥用,意外事件或其他未知事件。 但我想定期重新同步从站,以确保不被忽视的复制问题不会长期不被修正。

有没有人有一个工作/testing的解决scheme去做这个?

这是我提出的解决scheme; 但是我可以从任何有经验的人处理这个问题的其他可能性开放:

据推测这和在主人身上一样简单:

mysqldump --all-databases --master-data >dbdump.sql

然后在每个从站上加载这个SQL文件,之后运行stop slave ,然后start slave 。 理论上,从站将使用更新后的主坐标重新build立同步,然后我们走。

据推测,这可以在非高峰时段作为每周工作自动化。

但有没有更好的方法来做到这一点?

你是否在奴隶和主人身上使用innodb引擎? 避免可以打破复制的查询 ? 避免在主人和奴隶之间不洁的closures? 如果是这样的复制在我的经验是相当稳固的。

知道你的奴隶如何打破会有所帮助 – 复制停止? 如果是这样 – 在奴隶上有什么错误? 或复制运行,但奴隶与主人不同步?

如果是第二种情况 – 您可以尝试定期运行pt-table-checksum来validation从服务器是否与主服务器同步。 如果你发现它们不是 – 你可以使用pt-table-sync [即使在非阻塞模式下,我发现它阻塞了主服务器,所以不要在繁忙的一天中运行]。

编辑:如果数据的总大小不是很大,你可以在主服务器上运行innodb,而不想使用定期执行的pt-table同步写脚本阻塞主服务器。 该脚本应该:

  • 运行pt-table-checksum,如果一切正常 – 退出
  • 使用mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=1 -A完全转储master mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=1 -A
  • 运行在从属echo "stop slave"| mysql echo "stop slave"| mysql
  • 重新加载转储

由于 – 主数据= 1您的转储将包含change master ...语句。

但说实话 – 你会更好地find你的问题的根源。 如果这个数据有任何价值,那么监测是必须的。