2012-02-11 81 views
7

使用一个MASTER和一个SLAVE的简单复制设置,如何确保SLAVE和MASTER完全同步?如何确保MySQL复制SLAVE与复制MASTER完全同步?

现在是的,他们都从完全相同的图像开始,复制工作并报告一切正常但是: *发生错误会停止复制,然后复制必须停止并稍后恢复。 *也许在SLAVE上意外发生了变化,然后它与MASTER不再一样。 *其他可能会破坏同步的任何情况。

尽管可以对数据库做一个大的mysqldump并比较这些文件,但我会对可以更容易实现的方法感兴趣,也可以自动检查以确保所有文件都同步。

谢谢

+0

http://dba.stackexchange.com/questions/17501/monitoring-replication-on-mysql – 2013-02-13 12:24:19

回答

8

您是否试过Percona工具包(以前称为Maatkit)?您可以使用其中一种工具,即pt-table-checksum作为您的案例。您也可以在他们的网站上查看其他工具。

PT-表校验和执行由 执行校验和的查询在主,其在与该主不一致的副本产生不同的结果 在线复制一致性检查。可选的DSN 指定主控主机。如果发现任何差异,或者发生任何警告或错误 ,该工具的退出状态为 非零。

以下命令将连接到复制主上 本地主机,校验每个表,并报告每 检测副本的结果:如果您有MySQL服务器版本5.6.14或更高

+0

还没有尝试过,但似乎很有希望。谢谢:) – Collector 2012-02-12 12:15:59

+0

他们也有一个名为'pt-table-sync'的工具,可以让你在发现错误的情况下同步表格。它使用'pt-table-checksum'来查找潜在的问题并向主服务器发出声明以强制从服务器进行复制,因此请自担风险! – ESG 2012-12-28 19:27:19

3

,你可以使用MySQL复制同步检查器。它包含在MySql服务器包中。旨在专门用于支持全局事务标识符(GTID)并且具有gtid_mode = ON的服务器。

此实用程序允许您检查复制服务器的同步。它检查主站和从站之间或两个从站之间的数据一致性。该实用程序报告丢失的对象以及丢失的数据。 该实用程序可以在活动的复制拓扑上运行,应用同步过程来检查数据。那些复制未激活的服务器仍然可以被检查,但同步过程将被跳过。在这种情况下,用户需要手动同步服务器。

See MySQL Documentation for more information

+0

编辑答案请cpbumz。这个工具非常有用, – Franco 2015-06-10 19:46:33

+0

这个工具就像一个魅力。我创建了一个单线程批处理文件来每天晚上运行此工具,然后使用另一个服务,我在电子邮件中获得结果文件。顺便说一句,GTID复制也是一种魅力。 – 2017-04-18 23:49:39

3

你是对是可疑的一个看似健康的主/从复制设置的!当我们突然收到来自check_mk的关于我们的主服务器上存在的数据库的警报(我们的从服务器上不存在)时,我们运行良好,但主从状态输出很好!这有多令人不安?证明过程完整性的方法是使用校验和来验证数据。

我在网上看到很多唠叨,推荐pt-table-checksum。然而,它的limitations被证明是太麻烦了,我们不能容忍。最重要的是,它需要甚至设置基于语句的复制(请参阅pt-table-checksum链接)。正如它在mysql 5.6 online documentation中所述(对于基于行的复制...)“所有更改都可以复制,这是最安全的复制形式。”基于声明的复制还有其他一些缺点,使我们的开发人员感到紧张,因为某些函数无法正确复制;请参阅文档以获取列表。

我们已经遇到了使用基于语句的复制的master和slave的问题,所以我们特别试图避免它。

我们打算尝试mysqlrplsync,它特别提到它"works independently of the binary log format (row, statement, or mixed)"。然而,它也提到gtid模式必须打开,它需要MySQL 5.6.14或更高版本......这意味着,我相信至少与RHEL7/CentOS 7一起交付的MySQL已经不在了。您需要获取MySQL社区版,这是留给练习读者but you can go here for the packageshere for the repos, including RHEL derivatives and Debian