对比MySQL表数据内容方式汇总

一. mysql自带的checksum命令: 可在不同服务器通过checksum值对比两张表是否一致, 加上EXTENDED参数表示逐行扫描, 结果更为可靠; 执行过程会给表加上System lock, 参考:https://dev.mysql.com/doc/refman/5.7/en/checksum-table.html

mysql> checksum table item_sku EXTENDED;
+---------------+------------+
| Table        | Checksum   |
+---------------+------------+
| test.item_sku | 3046185714 |
+---------------+------------+
1 row in set (15.53 sec)

mysql> select count(1) from item_sku;
+----------+
| count(1) |
+----------+
| 5912619  |
+----------+
1 row in set (3.04 sec)
a89266bc1603571803faebb468a0393184d4ab79
可通过对比checksum值来判断表是否一致; 粒度比较粗, 不能具体知道哪些数据不一致. 其优点是速度较快, 可先用checksum判断表是否一致, 然后再用其他工具进一步检查数据内容.

二. 常用pt工具能高效地检查主从一致性, 但前提是有主从关系
主: *.*.*.39
从: *.*.*.43

pt-table-checksum \
    -h*.*.*.39 \
    -uroot \
    -p123456 \
    --databases=test \
    --tables=item_sku \    
    --no-check-binlog-format \
--nocheck-replication-filters   

feaa40ddf3831a8f770cdf7f62e03d4e07b17d39

pt-table-sync \
    --replicate=percona.checksums \
    h=*.*.*.39,u=root,p=123456,D=test,t=item_sku \
    h=*.*.*.43,u=root,p=123456 \
    --charset=utf8 \
    --print

--print 即可生成修复脚本; 该工具效率比较高, 每次仅对chunk加读锁, 能生成修补数据的脚本.
pt工具足够强大不多说, 但以下情形不适合使用:
1)两台服务器无主从关系
2)有主从关系, 但只想检查主从数据差异, 不希望数据开始复制带来负面影响
3)有主从关系, 但有复制延迟或主库压力过大

三. 常见图形工具SQLyog提供了Data Comparison, 配置好源和目标的连接, 选好需要对比的表, 就可以开始对比了. 对比好后, 可选出数据不一致的内容, 然后生成相应的修复脚本
7928b3cd806211469a79e924fd19b62b7093c414
注意: 当发现一个数据不同的时候, 会停止运行, 需要点击Next Difference才能把脚本完全整理出来, 不太方便.
图形工具SQLyog效率非常高, 仅次于pt工具. 但有限制: 当主键大小写敏感的时候, 不能比较, 出现如下错误; 且该工具为图形界面, 不提供命令行支持, 所以认为其通用性低

1d026705fcaace0b42b703f4538d9e7fc20ca310


四. Red-gate提供了很多SQL Server的工具, 发现它的MySQL Data Compare也是可以对比的. 没有用过SQL Server会比较陌生, 地址:http://www.red-gate.com/products/mysql/mysql-data-compare/
选好想要对比的两个数据库:
5f06b219e77c3297cb9319e61f2a2499aa2521b9
选择需要对比的表:
3331b24a8640bd34f3a679892b10b047265f81ce
开始对比:
b5a3fd3083ddda06a8f83d9b8c5758d770c1a41a

在对比的同时, 去mysql观察其原理: 把表拉回本地, 程序内部对数据逐行对比, 对比过程会执行以下语句.

1a35268ab27137083356e78c66ba2da5af30a066

会看到相当多的时间耗在Writing to net, 可增大max_allowed_packet 值提高网络传输效率; 对比结束后, 可以看到如下结果
7ebb3c9b34abdb36c2c3ec3a964d386abbe13bba

然后点击Deployment Wizard就可以生成修复数据的脚本了

f92d383595b3118157016475d4503574bc5b2b62

4c4288ca34931106dd6e796acb8f27f9f8948f62

用了几次之后, 会卡在Planning Deployment几个小时才出结果; 毕竟是免费版本, 按官方步骤操作没发序列号过来. 官方称: The MySQL tools now benefit from a free edition for non-commercial use. We are, however, unable to provide support for this edition. 介绍该工具只为多掌握一种检查数据的方法, 仅供参考

五. mysqldbcompare来自mysql官方工具utilities, 但实际上各方面几乎最差, 是笔者最不推荐的一个:
5948fd80c1f8b82ac47eed1bb29440734723b616
原理: 在给定的两台服务器上, 分别串行分组校验, 注意到是一台服务器校验完, 再到下一台服务器校验, 效率极其低下, 但效率最低; 而且只是2G的表, 对比过程中就莫名其妙的被kill掉, 而且不能指定检查某张表

下面是5种对比表数据内容工具的总结:

0a176caa2129fb681eabc2fb4592d932c2a5574c

转自: http://120.76.165.139/WordPress-master/index.php/2017/02/17/mysql-data-comparison/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值