• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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值相同,则这些行相同,如果不同,则证明存在差异,再按照这些行进行逐行对比。

    假设我们按照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值对比,最终找到差异行。

    最终对比图:

    PS:

    在使用GROUP_CONCAT时,需要配置MySQL变量group_concat_max_len,默认值为1024,超出部分会被阶段。

    您可能感兴趣的文章:
    • mysql 5.7.20常用下载、安装和配置方法及简单操作技巧(解压版免安装)
    • JavaWeb连接数据库MySQL的操作技巧
    • 利用tcpdump对mysql进行抓包操作技巧
    • 30个mysql千万级大数据SQL查询优化技巧详解
    • Mysql根据时间查询日期的优化技巧
    • 提升MYSQL查询效率的10个SQL语句优化技巧
    • MySQL使用的常见问题解决与应用技巧汇总
    • 5个保护MySQL数据仓库的小技巧
    • 分享101个MySQL调试与优化技巧
    • MySql Sql 优化技巧分享
    • MySQL注入绕开过滤的技巧总结
    • MySQL数据库常用操作技巧总结
    上一篇:Linux下安装mysql的方式(yum和源码编译两种方式)
    下一篇:云服务器Ubuntu_Server_16.04.1安装MySQL并开启远程连接的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL快速对比数据技巧 MySQL,快速,对比,数据,技巧,