我们在MySql中想要对比下两个不同的实例上的数据并且找出差异,除了主键之外我们还要对比每一个字段,应该怎么做呢?

方案一:写一个程序将两个实例里面的每一行数据都分别取出来对比,但是耗时我们无法估计,大概天荒地老吧。

方案二:对每一行数据所有字段合并起来,取checksum值,再按照checksum值对比,看着可行,尝试下。

我们可以先用MySql提供的CONCAT函数来合并字段的值,但是如果CONCAT中含有null值,那么就会导致最终的结果为NULL,所以我们要先用IFNULL函数来替换NULL值,比如:

CONCAT(IFNULL(C1,''),IFNULL(C2,''))

由于加入表有很多行,手动拼接脚本比较累,所以我们可以使用information_schema.COLUMNS来处理:

## 获取列名的拼接串

SELECT

GROUP_CONCAT('IFNULL(',COLUMN_NAME,','''')')

FROM information_schema.COLUMNS

WHERE TABLE_NAME='table_name';

假设我们有测试表:

CREATE TABLE t_test01

(

id INT AUTO_INCREMENT PRIMARY KEY,

C1 INT,

C2 INT

)

我们便可以拼接出下面的SQL:

SELECT

id,

MD5(CONCAT(

IFNULL(id,''),

IFNULL(c1,''),

IFNULL(c2,''),

)) AS md5_value

FROM t_test01

我们在这里执行了之后,把结果使用beyond compare对比下,很容易就能找出不相同的行以及主键ID。

但是数据量小一点还行,如果数据量大了,那么执行出来的结果集也是很大的,要想对比就相当费劲,我们就可以尝试缩小结果集,可以将多行记录的MD5值合并起来求MD5值,如果最后MD5的值相同,说明这些行也是相同的,如果不同的话肯定是有差异的,我们再对比这些行就可以了。

假设我们按照1000行一组来进行对比,如果需要将分组后的结果合并,需要使用GROUP_CONCAT函数,注意在GROUP_CONCAT函数中添加排序保证合并数据的顺序, SQL如下:

SELECT min(id) as min_id,

max(id) as max_id,

count(1) as row_count,

MD5(GROUP_CONCAT(

MD5(CONCAT(

IFNULL(id,''),

IFNULL(c1,''),

IFNULL(c2,''),

)) ORDER BY id

))AS md5_value

FROM t_test01

GROUP BY (id div 1000)

执行结果为:

min_id max_id row_count md5_value

0 999 1000 7d49def23611f610849ef559677fec0c

1000 1999 1000 95d61931aa5d3b48f1e38b3550daee08

2000 2999 1000 b02612548fae8a4455418365b3ae611a

3000 3999 1000 fe798602ab9dd1c69b36a0da568b6dbb

当差异数据较少时,即使需要对比上千万数据,我们可以轻松根据根据min_id和max_id来快速定位到哪1000条数据里存在差异,再进行逐行MD5值对比,最终找到差异行。

最终对比图:

mysql数据对比_MySQL —— 如何快速对比数据?相关推荐

  1. mysql引擎总结_MySQL存储引擎对比总结

    存储引擎是数据库的核心,对于mysql来说,存储引擎是以插件的形式运行的.虽然mysql支持种类繁多的存储引擎,但是常用的就那么几种.这篇文章主要是对其进行一个总结和对比. 一.引言 在mysql5之 ...

  2. mysql 热备份 数据一致性_MySQL 使用 XtraBackup 进行数据热备份指导 [全量+增量]

    背景 最近一直涉猎 MySQL 数据库的操作.集群部署 注意到,为保证数据安全,掌握数据备份是极为重要的 相比小型服务的冷备份而言 在此推荐并整理更受推崇的 XtraBackup 下的热备份技巧 ☞ ...

  3. mysql存中文_mysql数据库存储中文数据的解决办法

    我在学习django中admin模块的时候,登录进入后台操作页面,输入中文数据,但保存之后全是乱码(全是"????????????"),然后就开始了解决问题之路. 1.首先百度搜索 ...

  4. mysql部署策略_MySQL延迟问题和数据刷盘策略流程分析

    一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策略 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.My ...

  5. 如何利用DTS数据同步功能,快速创建数据同步作业

    数据传输服务DTS(Data Transmission Service)提供的数据同步功能简单易用,您只需在控制台上进行简单操作,即可完成整个数据同步作业的配置. 注意事项 本文仅简单介绍数据同步作业 ...

  6. Sersync+rsync数据同步实践:快速解决数据同步问题

    前言 对于数据的实时同步,例如:某些配置文件或web文件在集群中的同步,通常我们有几种方式: 使用网络raid(例如:nfs/drbd)将某些目录由源服务器挂载到目标服务器(由于网络raid严重依赖网 ...

  7. mysql 快速复制_MySQL中快速复制数据表方法汇总

    本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: ...

  8. mysql 复制表中的数据_MySQL中快速复制数据表方法汇总

    本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: ...

  9. Mysql在生产环境中快速清理数据及表空间释放

    Mysql数据快速清理及表空间释放 1.TABLES表主要字段说明: MySQL的 information_schema 数据库中的TABLES 表记录了MySQL数据库中每个表占用的空间.表记录的行 ...

最新文章

  1. keycloak mysql_Keycloak换mysql存储详细步骤
  2. iperf3 测速跑不满的解决办法
  3. SAP JAM的自定义widget编辑功能
  4. ​shell中经常能看到的:/dev/null 21
  5. 今年大学毕业照画风太清奇.....我忍不住笑出了声!
  6. 同一个ip能否两次加入组播_组播IGMPv1/v2/v3精华知识汇总
  7. 基于属性加密的ABE算法的应用场景思考展望
  8. Django模板中如何将函数的变量作为字典key并获取对应的value
  9. access驱动程序_Linux驱动程序学习二 (续) scull 源码在内核5.4.0上的编译调试
  10. 【已解决】手机“此设备已安装证书授权中心,您的安全网络流量可能被监控”怎么办?
  11. 从头推导与实现 BP 网络
  12. 09年全年的case处理总量
  13. ServiceFabric极简文档-1.2 硬件环境.md
  14. 二分查找算法java实现
  15. Weblogic部署
  16. 威联通建php邮件服务器_威联通 ※ 群晖 虚拟机性能对比 我可能要碰瓷 eSir
  17. android项目查看sdk版本号,怎查看Android项目的Android版本
  18. sap 流程图 退货销售订单_ERP系统:退货流程的解决方案
  19. AIC准则选三个变量的r语言代码
  20. [建筑设计].TLF-SOFT-SOFTPLAN.V13.33.bin Flaresim

热门文章

  1. OpenGL坐标变换
  2. [计算机通信网络]跳(hop) 的概念,tracert指令来查看访问站点经过了多少个路由器
  3. C++ 一把窥探OC底层的利刃
  4. Nazo解密游戏攻略
  5. SpringMVC-狂神
  6. phontomjs webpage模块属性
  7. Linux集群 分布式存储-MFS部署
  8. srt文件与视频文件合成在一起导入剪映
  9. 中国天然货贝的种类及来源简述
  10. watch 命令的使用