修改MySQL表ROW_FORMAT及版本迁移后的数据一致性验证方法
MySQL 5.6迁移至8.0:修改ROW_FORMAT后的数据一致性验证方法
针对修改ROW_FORMAT后校验和变化的问题,你可以用以下几种方法验证数据一致性:
1. 逐行哈希值对比
直接生成每行数据的唯一哈希值,对比修改前后、迁移后的结果:
- 对目标表执行如下SQL(替换字段列表和主键):
SELECT SHA2(CONCAT_WS('|', col1, col2, col3, IFNULL(col4, 'NULL')), 256) AS row_hash FROM table_name ORDER BY primary_key_col; - 把查询结果导出为文本文件,在修改ROW_FORMAT前后、迁移后分别执行并对比文件内容,确保所有行的哈希值完全一致。
- 注意:用
CONCAT_WS处理字段拼接,用IFNULL把NULL值转为固定字符串,避免因NULL的不同处理逻辑导致哈希差异。
2. 关键统计值校验
通过聚合函数验证核心数据特征的一致性:
- 先确认总行数一致:
SELECT COUNT(*) FROM table_name; - 对数值型字段,校验求和、极值:
SELECT SUM(num_col), AVG(num_col), MAX(num_col), MIN(num_col) FROM table_name; - 对字符串或枚举型字段,校验唯一值数量:
SELECT COUNT(DISTINCT str_col) FROM table_name; - 修改前后、迁移后这些统计值必须完全匹配,否则说明数据存在异常。
3. mysqldump导出文件对比
通过导出纯数据文件做文本对比:
- 修改ROW_FORMAT前后、迁移后,分别执行导出命令(仅导出数据):
mysqldump -u username -p --no-create-info --skip-extended-insert --default-character-set=utf8mb4 db_name table_name > table_data_xxx.sql - 使用
diff工具(Linux/macOS)或文本对比工具(Windows)对比导出的SQL文件,检查数据行是否完全一致。 - 参数说明:
--skip-extended-insert让每行数据生成单独的INSERT语句,方便精准对比;--default-character-set确保字符集统一,避免乱码导致的差异。
4. pt-table-checksum工具校验
利用Percona Toolkit的pt-table-checksum做块级数据校验:
- 在同一实例修改ROW_FORMAT前后,或跨迁移前后的实例,执行如下命令:
pt-table-checksum h=source_host,D=db_name,t=table_name u=username p=password - 工具会自动将表分成多个数据块,计算每个块的校验和并对比,输出不一致的块信息。
- 注意:需要确保表存在主键或唯一索引,且工具拥有足够的数据库权限。
内容的提问来源于stack exchange,提问作者Avyaan
相关产品推荐
相关产品推荐

