MySQL快速对比数据技巧的示例剖析
发布时间:2022-01-22 16:49:53 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下MySQL快速对比数据技巧的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 在MySQL运维中,研发同事想对比下两个不同实例上的数据并找出差异,除主键外还需要对比每一个字段,如何做呢? 第一种方案,写程序将
小编给大家分享一下MySQL快速对比数据技巧的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 在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值相同,则这些行相同,如果不同,则证明存在差异,再按照这些行进行逐行对比。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |