`

MySQL checksum了解

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

Checksum Table在逻辑备份时候前后是否可以用于验证数据一致性。扩展一下发现有一些有趣的问题,比如数据插入顺序不同、表引擎不同、操作系统位数不同等。

插入顺序不同是否有影响

我们知道全表扫描是可以有很多种顺序的,尤其当表里面出现过delete动作以后,逻辑导出再导入另外一个表后,两个表的全表扫描结果可能不同。

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的结果的。

字段顺序不同是否有影响

在个row计算row_crc时,是每个字段依次计算的。但计算过程中会将上一个字段的结果作为计算下一个值的输入。

switch (f->type()) {
                case MYSQL_TYPE_BLOB:
                case MYSQL_TYPE_VARCHAR:
                case MYSQL_TYPE_GEOMETRY:
                case MYSQL_TYPE_BIT:
                {   
                  String tmp;
                  f->val_str(&tmp);
                  row_crc= my_checksum(row_crc, (uchar*) tmp.ptr(),
                           tmp.length());
                  break;
                }   
                default:
                  row_crc= my_checksum(row_crc, f->ptr, f->pack_length());
                  break;
              }   


因此字段顺序会影响结果。


字段长度不同是否有影响

即使看到相同的内容,也有可能得到不同的checksum。
   从上面计算每个field的crc上看,若为变长字段(varchar等),由于用于计算的是实际长度,因此不会影响。比如将表的varchar(20)字段改成varchar(25),不会改变checksum的值。
  但若将char(20)改成char(25),或者int改成bigint,则会改变checksum。

操作系统位数不同

  因为返回值是unsigned long,我们就担心32位和64位机器的溢出问题。所幸在计算过程中的ha_myisam直接定义为uint32,只是在返回的时候才转成unsigned long,因此无影响

字符集不同

  这个问题其实一直比较含糊。实际上与输入字符集有关。但有一个结论是肯定的:若表里面字段的unhex()值相同,得到的checksum即相同。

通过下面的代码进行对表进行检查 返回一个唯一值

mysql > checksum table test ;

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    MySQL OCP 课程实录 7-8

    9. **高可用性与集群**:了解MySQL集群和复制模式,如Multi-Master、Group Replication等,以及如何设计和实施高可用性的解决方案。 10. **数据库设计与范式理论**:回顾关系数据库设计的基本原则,如第一范式(1NF...

    mysql主从数据搭建问题处理

    7. **源码分析**:对于深入理解MySQL主从复制的工作原理,可以查看MySQL的源码,了解`binlog`日志的生成、网络传输和从服务器的解析执行过程。 8. **工具辅助**:有许多工具可以帮助我们管理和优化MySQL主从复制,...

    mysql主从同步配置

    在Java开发中,了解并掌握MySQL主从同步能够提升应用程序的稳定性和性能。 1. **主从同步原理** - MySQL主从同步基于异步复制机制,主服务器上的写操作先执行,然后将变更记录到二进制日志(binlog)。 - 从...

    MySQL数据库工程师常见面试题.zip

    同时,了解MySQL的故障诊断工具,如pt-table-checksum、pt-online-schema-change等。 最后,对最新版本MySQL的新特性有所了解,比如InnoDB Cluster、JSON支持、窗口函数等,会让你在面试中更具竞争力。 总结来说,...

    支持MySQL、Oracle等主流数据库的静态数据库校验修复工具

    在压缩包"gt-checksum-master"中,包含了GT-Checksum的源代码,开发者可以深入了解其工作原理,并根据实际需求进行定制或扩展。 总结,GT-Checksum作为一款强大的数据库校验修复工具,不仅简化了数据一致性检查的...

    mysql_投档项目终结

    - 数据类型与索引:了解MySQL中的各种数据类型,如INT、VARCHAR、DATE等,以及B-Tree、Hash、R-Tree等不同类型的索引,对数据库性能有直接影响。 - 并发控制:MySQL使用InnoDB存储引擎时,涉及事务处理、MVCC(多...

    MySQL主从不一致检查与修复

    总结,MySQL主从不一致问题的解决需要全面了解其成因,结合多种检查方法找出不一致点,并选择合适的修复策略。同时,预防措施同样重要,通过合理的配置和管理,可以有效避免和降低不一致的发生。希望这些内容能对你...

    mysql相关性能查看

    4. **Percona Toolkit**:这是一套用于MySQL性能优化和诊断的开源工具,包括pt-query-digest用于分析查询日志,pt-table-checksum用于检测数据不一致,pt-stalk则可以帮助定位慢查询。 5. **pt-query-digest**:此...

    mysql辅助工具

    - **功能**:汇总MySQL服务器的配置及状态信息,方便快速了解服务器状况。 - **使用场景**:日常运维、服务器审计。 ### 复制工具 - **pt-slave-delay** - **功能**:控制MySQL从服务器的复制延迟,以实现延迟...

    mysql主从备份

    了解MySQL主从复制的底层原理,可以深入阅读MySQL的源码,理解binlog和复制的实现细节。此外,有很多开源工具可以辅助管理主从复制,如Percona Toolkit(包含pt-table-sync和pt-table-checksum等工具)、Maatkit等。...

    MYSQL 5.6 从库复制的部署和监控的实现

    4. **使用第三方工具**:如 `pt-table-checksum` 和 `pt-table-sync` 可以帮助检测主从数据一致性,`Percona Monitoring and Management (PMM)` 或者 `MySQL Enterprise Monitor` 提供图形化的监控界面。 5. **定期...

    【MySQL面试题干货集合】20个经典常用面试题-需要找工作的一定要看 共11页.pdf

    - 使用`EXPLAIN`分析SQL执行计划,了解表扫描方式、索引使用等。 - `PROFILE`可以查看SQL执行过程中的各个阶段耗时,帮助定位瓶颈。 7. **备份与恢复**: - `mysqldump`用于逻辑备份,生成SQL脚本。 - `...

    MySQL DBA最佳运维工具 percona toolkit 使用手册

    4. **pt-table-checksum**和**pt-table-sync**:这两个工具用于检测和修复数据不一致。它们通过在多个复制节点间对比数据,发现并解决潜在的差异,确保数据的完整性。 5. **pt-index-usage**:分析查询日志以确定...

    20个「MySQL」经典面试题

    - 使用EXPLAIN分析查询计划,了解索引使用情况和潜在问题。 - 通过PROFILE查看查询执行阶段的时间消耗,定位性能瓶颈。 - 监控数据库性能,设置慢查询日志,定期分析优化。 10. **大规模数据库重启**: - 可能...

    mysql复制

    MySQL复制是一种分布式数据库技术,它允许数据从一个MySQL服务器(主服务器)实时同步到其他一个或多个服务器(从服务器)。...了解和掌握MySQL复制的相关知识,对于管理和维护大型MySQL集群至关重要。

    mysql 主从复制

    在实际应用中,结合标签“源码”和“工具”,开发者还可以深入研究MySQL的源代码,了解复制的内部机制,或者利用各种工具来辅助管理和维护复制环境。而提供的文档《理解MySQL——复制(Replication).docx》和《MySQL-...

    兼容性对比表格word排版格式1

    `binlog_checksum`参数在TDSQL中设置为`NONE`,而在MySQL 5.6中为`CRC32`,这意味着TDSQL可能不校验二进制日志的完整性,可能与性能优化有关。 `query_alloc_block_size`决定了查询分配块的大小,TDSQL为16384字节...

    简述MySQL分片中快速数据迁移

    6. **数据一致性检查**:使用`mk-table-checksum`工具检查新主从的数据一致性。 7. **启动服务**:更新mycat配置文件并启动mycat实例。 这两种方法各有优缺点。使用`mysqldump`的方法虽然中断业务时间相对较长,但...

Global site tag (gtag.js) - Google Analytics