来自 技术 2019-04-17 00:00 的文章

mysql的checksum

八年Java开发的感悟:什么才是程序员的立身之本>>>   

前言

在主从复制中Checksum常常需要对某些重要的表进行一致性检查。

checksum

Checksum table计算返回值的逻辑大致如下:

ha_checksum crc= 0;foreach(row in table){ row_crc= get_crc(row); crc+= row_crc;}return crc;

可以看到只要总行数以及行内容相同,与读取行的顺序无关。

从这个逻辑还能得到一下几个结论:1)与使用的引擎无关,也就是说即使主备不用同一个引擎,checksum也可用于检查。虽然InnoDB有隐藏行,但这里无视。

2)与是否有索引无关。row_crc只用行本身的数据来计算,并不包括索引数据。也就是说如果能够保证两个表里面的数据一样,表结构(列内容和顺序一样),操作系统一样,MySQL版本一致,是能够保证checksum的结果的。