`
丁林.tb
  • 浏览: 798049 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[MySQL Q&A] 说说checksum table

阅读更多

         有同学问到 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

         从上面计算每个fieldcrc上看,若为变长字段(varchar),由于用于计算的是实际长度,因此不会影响。比如将表的varchar(20)字段改成varchar(25),不会改变checksum的值。

         但若将char(20)改成char(25),或者int改成bigint,则会改变checksum

 

操作系统位数不同

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

 

字符集不同

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

0
0
分享到:
评论

相关推荐

    MySQL主从一致性检查&修复攻略

    安装完成后,需要在MySQL主库上创建一个具有相应权限的用户,以便pt-table-checksum工具可以正常执行检查任务。 安装配置完毕后,我们就可以执行pt-table-checksum来进行主从一致性检查了。工具的使用需要指定一...

    mysql 8 MGR集群

    MySQL 8 MGR 集群 MySQL 8 MGR 集群是一种高可用性的数据库解决方案,通过在多个服务器上部署多个 MySQL 实例,实现数据库的高可用性和负载均衡。本文将详细介绍 MySQL 8 MGR 集群的原理、安装、配置和部署。 一、...

    mysqldiff用法详解.pdf

    - `--skip-checksum-table`:数据一致性验证时不使用 `CHECKSUM TABLE`。 - `--skip-data-check`:跳过数据一致性验证。 - `--skip-row-count`:不检查字段数量。 ### 四、实例 以下是一个使用示例,将生成 SQL ...

    MySQL主从数据校验工具

    它包含了一些非常有用的命令,比如`pt-table-checksum`和`pt-table-sync`,这两个命令分别用于校验和同步主从数据库的数据。`pt-table-checksum`可以在不影响正常服务的情况下,对主从数据库进行在线校验,发现数据...

    MySQLreplicate容灾方案.docx

    可以使用工具如pt-table-checksum进行检查。 - **故障切换测试**:模拟主服务器故障,验证从服务器能否无缝接管并成为新的主服务器,确保业务不受影响。 5. **智慧容灾与网络安全** - **智慧容灾**:结合现代技术...

    MySQL OCP 课程实录 7-8

    7. **故障诊断与修复**:学习如何使用SHOW命令、ERROR LOG和general query log来定位问题,以及如何使用pt-table-checksum和pt-table-sync工具进行数据一致性检查和修复。 8. **InnoDB存储引擎**:深入探讨InnoDB...

    MySQL主从不一致检查与修复

    3. 工具检查:如Percona的pt-table-checksum和pt-table-sync等工具可自动化检测和修复不一致。 4. 手动审计:针对特定业务场景,手动检查关键表的关键字段。 三、修复策略 1. 重置主从关系:停用从库,重新配置...

    mha4mysql-0.56-0.el6

    同时,为了确保数据安全,通常会在切换后进行一致性检查,如使用`pt-table-checksum`工具。 总结来说,MHA for MySQL是一个强大的工具,能帮助企业在MySQL环境中实现高可用性,通过自动化故障切换减少服务中断时间...

    mysql主从同步配置

    - 使用`pt-table-checksum`和`pt-table-sync`等工具检查并解决数据不一致问题。 5. **性能优化** - 调整binlog格式和大小,如使用`ROW_FORMAT=COMPRESSED`减小binlog存储空间。 - 设置合适的`replicate-do-db`和...

    MySQL 5.7 single-primary单主GR安装手册

    根据提供的文档内容,本文将详细解析如何安装与配置MySQL 5.7的Single-Primary Group Replication(简称GR,即组复制)。此文档主要聚焦于MySQL 5.7版本下的单主模式组复制的安装与配置流程,适用于分布式环境中需要...

    读取mysql一个库下面的所有的表table

    - `TABLE_CATALOG`: 表的目录(通常是NULL,因为MySQL没有目录的概念)。 - `TABLE_SCHEMA`: 数据库名称,这里是"leo_ecshop"。 - `TABLE_NAME`: 表格的名称,例如"ecs_goods"。 - `TABLE_TYPE`: 表的类型,"BASE ...

    mysql主从数据搭建问题处理

    8. **工具辅助**:有许多工具可以帮助我们管理和优化MySQL主从复制,如`pt-table-checksum`用于检测主从数据一致性,`mysql-router`实现读写分离,`replication-manager`自动化管理复制。 9. **监控与调优**:持续...

    mysql_投档项目终结

    - 备份恢复工具:如mysqldump、mysqlpump,用于数据库备份,binlog分析工具如pt-table-checksum、pt-table-sync则用于主从数据同步验证和修复。 4. **项目开发与管理**: - 版本控制:Git等工具用于源码版本管理...

    MySQL 5.6 Reference Manual

    Table of Contents Preface, Notes, Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....

    MySQL经典面试题.docx

    13. **主从一致性校验**:可以使用pt-table-checksum或mysqldiff进行校验,未做则应建立定期校验机制。 14. **支持emoji表情**:需要确认MySQL版本支持UTF8MB4字符集,不支持时需升级或转换字符集。 15. **数据...

    mysql相关性能查看

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

    mysql主从备份

    此外,有很多开源工具可以辅助管理主从复制,如Percona Toolkit(包含pt-table-sync和pt-table-checksum等工具)、Maatkit等。 总结来说,MySQL主从备份是保障数据库高可用性的重要手段,涉及到binlog、复制线程、...

    mysql辅助工具

    - **pt-table-checksum** - **功能**:计算MySQL表的校验和,检测主从数据一致性。 - **使用场景**:数据完整性验证、复制问题排查。 ### 安装指南 为了使用Percona Toolkit,首先需要安装Perl环境及相关依赖包。...

Global site tag (gtag.js) - Google Analytics