我们有很多客户在他们的Slave上备份数据库并且觉得对于他们来说这已经足够了。从专业角度出发我们对此并不认同,因 为Slaves经常和Masters不一致. 这是怎么发生的呢?有许多不同的情况, 虽然MySQL多年来表现的很好,Slaves仍然经常和Masters数据不一致并且会经常损坏,所以你不应该指望能在从库上做好备份(当然有备份总比 没有备份要好)。

MySQL的主从复制简单和可靠得令人惊奇,但是这种简单也伴随着MYSQL相当宽松的数据完 整性定义,而这会使得Master和Slaves的数据在多种情况下都可能不同。我们甚至看到过客户的每台Slave和Master彼此数据各不相同,有 时候每周都能看到。有许多种情况会导致这样的问题,比如重复的key,不确定的程序被执行,常见的LIMIT不确定问题,等等。在你的数据库主从复制日志 中看到Warning警告是特别正常的。

所以我们通常推荐在Master上做备份,这样你总是可以能得到正确的 数据。我们会用各种先进的方法来做备份,通常尽量采用InnoDB引擎,这样备份的时候不会发生锁表,我们经常用高性能的硬件和合理的数据库配置来减小对 数据库性能的影响。这能保证合适的备份,完整的数据和良好的性能。

有一些很好的工具可以解决同步的问题,并且我 们已经开始给客户使用了,包括并且特别是老的Maatkit系统,这个系统现在由世界顶尖的MySQL的咨询公司Percona进行维护。特别是那些要对 从库整个重新同步不切合实际,或者复制出现错误的的大型系统,我们会用这些工具来扫描Slaves从而发现差异,并且测试其他能够修复和重新同步数据的工 具,所以我们经常每周都要进行修复工作。

利用这些工具,理论上来说客户可以在Slaves上进行备份工作,尽管 我们迄今为止还没有这样做,但我们一直在测试和评估这些复杂且强大的工具。在2012年夏天之前我们应该会在多数系统上运行这些工具来周期性的产生同步报 告,并增强包括在Slaves上进行良好备份保证的数据库备份选项(对于金融或者其他关键数据,我们通常还是会推荐在Master上做备份)。