有同学问到 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主库上创建一个具有相应权限的用户,以便pt-table-checksum工具可以正常执行检查任务。 安装配置完毕后,我们就可以执行pt-table-checksum来进行主从一致性检查了。工具的使用需要指定一...
MySQL 8 MGR 集群 MySQL 8 MGR 集群是一种高可用性的数据库解决方案,通过在多个服务器上部署多个 MySQL 实例,实现数据库的高可用性和负载均衡。本文将详细介绍 MySQL 8 MGR 集群的原理、安装、配置和部署。 一、...
- `--skip-checksum-table`:数据一致性验证时不使用 `CHECKSUM TABLE`。 - `--skip-data-check`:跳过数据一致性验证。 - `--skip-row-count`:不检查字段数量。 ### 四、实例 以下是一个使用示例,将生成 SQL ...
它包含了一些非常有用的命令,比如`pt-table-checksum`和`pt-table-sync`,这两个命令分别用于校验和同步主从数据库的数据。`pt-table-checksum`可以在不影响正常服务的情况下,对主从数据库进行在线校验,发现数据...
可以使用工具如pt-table-checksum进行检查。 - **故障切换测试**:模拟主服务器故障,验证从服务器能否无缝接管并成为新的主服务器,确保业务不受影响。 5. **智慧容灾与网络安全** - **智慧容灾**:结合现代技术...
7. **故障诊断与修复**:学习如何使用SHOW命令、ERROR LOG和general query log来定位问题,以及如何使用pt-table-checksum和pt-table-sync工具进行数据一致性检查和修复。 8. **InnoDB存储引擎**:深入探讨InnoDB...
3. 工具检查:如Percona的pt-table-checksum和pt-table-sync等工具可自动化检测和修复不一致。 4. 手动审计:针对特定业务场景,手动检查关键表的关键字段。 三、修复策略 1. 重置主从关系:停用从库,重新配置...
同时,为了确保数据安全,通常会在切换后进行一致性检查,如使用`pt-table-checksum`工具。 总结来说,MHA for MySQL是一个强大的工具,能帮助企业在MySQL环境中实现高可用性,通过自动化故障切换减少服务中断时间...
- 使用`pt-table-checksum`和`pt-table-sync`等工具检查并解决数据不一致问题。 5. **性能优化** - 调整binlog格式和大小,如使用`ROW_FORMAT=COMPRESSED`减小binlog存储空间。 - 设置合适的`replicate-do-db`和...
根据提供的文档内容,本文将详细解析如何安装与配置MySQL 5.7的Single-Primary Group Replication(简称GR,即组复制)。此文档主要聚焦于MySQL 5.7版本下的单主模式组复制的安装与配置流程,适用于分布式环境中需要...
- `TABLE_CATALOG`: 表的目录(通常是NULL,因为MySQL没有目录的概念)。 - `TABLE_SCHEMA`: 数据库名称,这里是"leo_ecshop"。 - `TABLE_NAME`: 表格的名称,例如"ecs_goods"。 - `TABLE_TYPE`: 表的类型,"BASE ...
8. **工具辅助**:有许多工具可以帮助我们管理和优化MySQL主从复制,如`pt-table-checksum`用于检测主从数据一致性,`mysql-router`实现读写分离,`replication-manager`自动化管理复制。 9. **监控与调优**:持续...
- 备份恢复工具:如mysqldump、mysqlpump,用于数据库备份,binlog分析工具如pt-table-checksum、pt-table-sync则用于主从数据同步验证和修复。 4. **项目开发与管理**: - 版本控制:Git等工具用于源码版本管理...
Table of Contents Preface, Notes, Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....
13. **主从一致性校验**:可以使用pt-table-checksum或mysqldiff进行校验,未做则应建立定期校验机制。 14. **支持emoji表情**:需要确认MySQL版本支持UTF8MB4字符集,不支持时需升级或转换字符集。 15. **数据...
4. **Percona Toolkit**:这是一套用于MySQL性能优化和诊断的开源工具,包括pt-query-digest用于分析查询日志,pt-table-checksum用于检测数据不一致,pt-stalk则可以帮助定位慢查询。 5. **pt-query-digest**:此...
此外,有很多开源工具可以辅助管理主从复制,如Percona Toolkit(包含pt-table-sync和pt-table-checksum等工具)、Maatkit等。 总结来说,MySQL主从备份是保障数据库高可用性的重要手段,涉及到binlog、复制线程、...
- **pt-table-checksum** - **功能**:计算MySQL表的校验和,检测主从数据一致性。 - **使用场景**:数据完整性验证、复制问题排查。 ### 安装指南 为了使用Percona Toolkit,首先需要安装Perl环境及相关依赖包。...