我们在主/辅助复制设置中使用MySQL 5.1。我使用mk-表- Maatkit的校验和在主服务器上生成校验和,并对副本执行一致性检查。
mk-table-checksum用于生成校验和,并且非常简单:
% mk-table-checksum localhost \
--quiet \
--replicate=test.checksum --empty-replicate-table --create-replicate-table \
--chunk-size=500000 --sleep-coef=0.5 \
--ignore-tables=mysql.general_log_backup,mysql.general_log,mysql.slow_log,mysql.help_topic,mysql.tables_priv然后将这些校验和复制到副本(从服务器),在那里我们比较校验和。
大约一个月前,我们发生了服务器故障。我们修复了服务器,启动了数据库并恢复了复制。一切看起来都很好-- Slave_IO_Running和Slave_SQL_Running都被设置为“是”,除了下面提到的错误之外,一切似乎都被成功地复制了。
然而,有一个问题。当我在副本上使用下面的推荐方法检查表时,会发现一致性问题。
# mysql --execute "SELECT db, tbl, chunk, this_cnt-master_cnt AS cnt_diff, \
> this_crc <> master_crc OR ISNULL(master_crc) <> ISNULL(this_crc) AS crc_diff \
> FROM test.checksum \
> WHERE master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc);"
+--------+------------------+-------+----------+----------+
| db | tbl | chunk | cnt_diff | crc_diff |
+--------+------------------+-------+----------+----------+
| plants | trees_properties | 40 | 0 | 1 |
+--------+------------------+-------+----------+----------+即使在主服务器上使用mk-表同步强制进行另一次同步之后,也会发生此问题。我可能需要手工替换腐败的数据,但我不清楚实际问题是什么。什么是“大块”?
我的猜测是,只有少数行是不同的,我可能可以手工替换这些行。但是,我如何列出丢失了哪些行?
我意识到Maatkit已经被反对支持Percona工具。我计划有一天升级。但是现在,“如果它没有坏,就不要修理它。”
发布于 2012-11-16 23:31:12
我认为块是要扫描和校验的一组行数。
我从来不喜欢块,因为如果表顺序很重要,那么如果只将一行写在前面或后面,那么每个块就会完全不同。
不要设置块大小,看看整个表是否被作为一个整体进行校验,而不是每个块校验和。
您还可以使用mk-表同步选项运行--print,并将其重定向到文本文件,以查看如果您使用--execute选项,是否已经创建了用于同步从属程序的SQL。如果mk-table-sync的文本文件中没有任何内容,您将不得不执行物理复制(对于MyISAM)或mysqldump表,并将其加载到从服务器上(用于InnoDB)。
试试看!!
https://dba.stackexchange.com/questions/28830
复制相似问题