精华内容
下载资源
问答
  • 数据一致性校验

    千次阅读 2019-05-28 17:10:01
  • MYSQL有哪些常用的数据一致性校验工具? 本文会针对介绍几个MYSQL工具帮助我们更好地处理数据一致性问题。 2 mysqldiff工具(数据库对象级别比较工具) 1.编译安装mysql Utilities : 官方下载地址:...

    MySQL 主从数据 一致性校验工具

    1 前言

    如何验证MYSQL主从数据是否一致?

    如果数据不一致,如何快速找出不一致的数据进行修补?

    MYSQL有哪些常用的数据一致性校验工具?

    本文会针对介绍几个MYSQL工具帮助我们更好地处理数据一致性问题。

    2 mysqldiff工具(数据库对象级别比较工具)

    1.编译安装mysql Utilities :

    官方下载地址:https://dev.mysql.com/downloads/utilities/

    cd /soft 
    tar -zxvf mysql-utilities-1.6.5.tar.gz 
    cd mysql-utilities-1.6.5 
    python ./setup.py build 
    python ./setup.py install
    

    安装驱动程序 Connector/Python:

    官方下载地址:https://downloads.mysql.com/archives/c-python/

    cd /soft 
    rpm -ivh mysql-connector-python-2.1.7-1.el7.x86_64.rpm
    

    2.mysqldiff工具的语法

    $ mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4
    接下来看一些主要的参数:
    –server1:配置 server1 的连接。
    –server2:配置 server2 的连接。
    –character-set : 配置连接时用的字符集,如果不显示配置默认使用character_set_client。
    –width:配置显示的宽度。
    –skip-table-options : 保持表的选项不变,即对比的差异里面不包括表名 、AUTO_INCREMENT、ENGINE、CHARSET 等差异。
    -d DIFFTYPE,–difftype=DIFFTYPE : 差异的信息显示的方式,有 [unified|context|differ|sql],默认是 unified。 如果使用 sql,那么就直接生成差异的SQL,这样非常方便。
    –changes-for=:修改对象。例如–changes-for=server2,那么对比以 sever1 为主, 生成的差异的修改也是针对 server2 的对象的修改。
    –show-reverse:在生成的差异修改里面,同时会包含 server2 和 server1 的修改。

    3.常用示例

    示例:

    示例一:检查 server1,server2 上的某个表是否一致

    mysqldiff --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 orcldb.orcl_m5:orcldb.orcl_m5
    


    示例二:检查 server1,server2 上的两个数据库是否一致

    mysqldiff --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 orcldb:orcldb 
    --changes-for 选项来控制对比方向。默认是以 server1。
    


    示例三:检查 server1,server2 上的两个数据库中的某个表是否一致,同时显示差异修改,可以使用–show-reverse选项:

    mysqldiff --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 orcldb.orcl_m5:orcldb.orcl_yg --difftype=sql --show-reverse -vvv
    

    3 mysqldbcompare工具(数据库库级别比较工具)

    1.编译安装mysql Utilities :

    官方下载地址:https://dev.mysql.com/downloads/utilities/

    (编译操作同上)

    安装驱动程序 Connector/Python:

    官方下载地址:https://downloads.mysql.com/archives/c-python/

    (编译操作同上)

    2.mysqldbcompare工具的使用

    mysqldbcompare 工具可以比较数据的差异(数据的值是否一致)。
    mysqldbcompare 工具参数解释,可以参照官方文档。这里只解释几个常用的参数 :
    –server1=user:passwprd@host 要对比的第一个库,指定用户、密码和主机。如果没有密码,密码可以忽略
    –server2=user:password@host 要对比的第二个库,指定用户、密码和主机。如果没有密码,密码可以忽略
    –difftype=[unified|context|differ|sql] unified 和 context、differ:会显示相差的具体的数据。sql:会生成的具体的 SQL。具体信息,如下:
    –changes-for=[server1|server2] 以 difftype=sql 为例 , 如果设置 changes-for=server1,那么,生成的sql 是 update server1.tables set * * * *
    –run-all-test 检查所有,即使检测到第一个不一致的数据,仍然继续。
    –show-reverse:【反转显示】在生成的差异修改里面,同时包含 server2 和 server1 的修改。

    可以通过–difftype选项来定义输出风格。

    unified (default):统一的格式输出

    context :上下文格式输出

    differ :differ-style 格式输出

    sql:SQL转换语句输出

    最左边的db1对应于–server1 选项,最右边的 dbx 对应于–server2 选项。
    –changes-for=server1:针对 server1,以 server2 为参照物(默认)

    –changes-for=server2:针对 server2,以 server1 为参照物

    3.常用示例

    示例一:检查 server1,server2 上某个数据库是否一致(如果不指明数据库,需要加-a表示检查所有的数据库)

    mysqldbcompare --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 orcldb:orcldb
    



    示例二:检查 server1,server2 上所有数据库是否一致

    mysqldbcompare --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 --run-all-test -a
    



    示例三:检查 server1,server2 上所有数据库是否一致,列出差异,以及修改server1,以server2为参照物的SQL语句

    mysqldbcompare --server1=root:root@192.168.1.151:3306 --server2=root:root@192.168.1.152:3306 --run-all-test --changes-for=server1 --difftype=sql -a
    

    4 mysqlrplsync工具(主从复制 数据同步检查工具)

    01.在主从之间检测数据的一致性,如下所示:

    mysqlrplsync --master=root:root@192.168.1.151:3306 --slaves=root:root@192.168.1.152:3306
    

    02.在从从之间检测数据的一致性,如下所示:

    mysqlrplsync --slaves=root:root@192.168.1.152:3306,root:root@192.168.1.152:3306
    

    03.对特定的数据库和表进行数据一致性检查,如下所示:

    mysqlrplsync --master=root:root@192.168.1.151:3306 --slaves=root:root@192.168.1.152:3306 orcldb1 orcldb.orcl_m5
    

    04.排除某些特定的数据库和表,进行数据一致性检查,如下所示:

    mysqlrplsync --master=root:root@192.168.1.151:3306 --slaves=root:root@192.168.1.152:3306 --exclude=orcldb1,orcldb2.orclbak21
    

    05.对有过滤的复制进行检查,如下所示:

    mysqlrplsync --master=root:root@192.168.1.151:3306 --slaves=root:root@192.168.1.152:3306 --verbose
    

    对于主需要有锁定表、进行校验和获取主状态信息的权限。 具体来说,需要有 SUPER 或 replication client, lock tables 和 select 权限。

    缺点是:相对于mysqldbcompare工具,没法输出差异数据。

    5 checksum工具(自带)

    在主、从库上分别执行checksum语句,比较值是否相同。 仅适用于“表”之间的验证数据一致性。

    mysql> checksum table orcldb.myorcl;
    +------------------+------------+
    | Table            | Checksum   |
    +------------------+------------+
    | orcldb.myorcl | 3772618113 |
    +------------------+------------+
    
    
    
    
    
    
    
    
    
    
    展开全文
  • mysql集群数据一致性校验

    千次阅读 2017-03-23 09:56:09
    什么是数据一致性?这里仅仅针对mysql,或是关系型数据库,一致性主要包括两... 如何实现数据一致性校验?一种思路就是逐行逐字段比较主库和备库的表;另外一种思路是,不逐行逐字段比较,取而代之的是分别对主库和备

    什么是数据一致性?这里仅仅针对mysql,或是关系型数据库,一致性主要包括两方面,表结构一致和数据内容一致。一般情况下,表结构变更相对是少的,而且不一致的概率也很小,即使检查,也相对容易;而导致数据内容不一致的情况很多,所以我们更关心的数据内容的一致性。

          如何实现数据一致性校验?一种思路就是逐行逐字段比较主库和备库的表;另外一种思路是,不逐行逐字段比较,取而代之的是分别对主库和备库计算校验和,通过判断校验和是否相同,确定主备库数据是否一致

    mysql> select count(*) from 5000shot;

    mysql> select sum(samplenum) from 5000shot;

    计算条数


    计算信号数之和


    两种思路都很简单,第一种思路正确性高,但性能比较差,因为返回大量的结果集导致大量的网络IO和磁盘IO;而第二种思路则恰好相反,性能会更好,少了IO,多消耗了一些CPU资源(计算校验和),正确性不如第一种思路。但是考虑到生产环境下,数据时时刻刻都是动态变化的,就没那么简单了。通过对表加锁,可以保证我们在校验时,数据是静态的,待我们顺利完成校验后,再解锁。mysql自带命令CHECKSUM TABLE,就是通过锁表方式来保证数据是静态的。这种方式对于小表,访问量小的表还好,若表非常大,校验需要很长时间,生产环境是不能容忍的。既然要保持静态就需要锁表,可不可以缩短锁表时间呢?pt-table-checksum通过将表分片,每次只对一部分行上锁,这样在校验过程中,一时刻只有部分行被锁住,减少对业务的影响。

    展开全文
  • 为了确保上线前迁移的数据一致性,制定了多种预案,其中为了验证主从数据一致,使用了percona-toolkit 。percona-toolkit源自Maatkit和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不...

    背景

    新项目要上线了,数据库采用的MySQL主从同步配置。为了确保上线前迁移的数据一致性,制定了多种预案,其中为了验证主从数据一致,使用了percona-toolkit 。

    percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,请大家还是使用percona-toolkit吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,里面的工具对DBA非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。本文主要介绍percona-toolkit(以下简称PT)安装过程及通过其检查两个库的一致性及延迟率。

    安装过程

    安装Perl运行环境

    PT是通过Perl语言编写的,因此使用时首先要安装Perl运行环境。

    查找依赖环境,命令如下:

    rpm -qa perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL

    接下来就是缺啥,安装啥,用如下命令:

    yum install perl-DBI

    yum install perl-DBD-MySQL

    yum install perl-Time-HiRes

    yum install perl-IO-Socket-SSL

    PT下载

    在安装过程中发现,通过wget方式获取PT,下载速度很慢,推荐去官网找到下载链接,用下载工具进行下载。

    f3b092a72421c14916615683895f6de5.png

    安装TermReadKey

    在安装PT前,要先安装TermReadKey,否则会报错,可以在下面的地址下载:

    执行以下下命令,安装TermReadKey

    rpm -ivh perl-TermReadKey-2.30-1.el5.rf.x86_64.rpm

    PT安装

    通过以下命令,对PT进行安装

    rpm -ivh percona-toolkit-3.3.0-1.el7.x86_64.rpm

    成功安装的校验

    1. 执行完安装命令没有提示出错。

    2. 执行pt命令,例如pt-table-checksum,有命令提示。

    安装注意事项

    若安装PT过程中报错,提示

    67666b2c9670776cbb8e302d9fda8e28.png

    在MySQL8和MySQL5.7下亲测,执行以下命令可以解决:

    yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

    yum -y install rsync perl l perl-Digest-MD5

    若报错如下:

    053008b71166da714dc2d207cc7fe0a6.png

    执行以下命令:

    rpm -ivh mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm(版本按需调整)

    主从是否一致的校验

    首先在各个库中都要有checksums表

    create database percona;

    CREATE TABLE checksums (

    db CHAR(64) NOT NULL,

    tbl CHAR(64) NOT NULL,

    chunk INT NOT NULL,

    chunk_time FLOAT NULL,

    chunk_index VARCHAR(200) NULL,

    lower_boundary TEXT NULL,

    upper_boundary TEXT NULL,

    this_crc CHAR(40) NOT NULL,

    this_cnt INT NOT NULL,

    master_crc CHAR(40) NULL,

    master_cnt INT NULL,

    ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (db, tbl, chunk),

    INDEX ts_db_tbl (ts, db, tbl)

    ) ENGINE=InnoDB;

    执行以下命令对主从一致性进行检查

    pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=percona.checksums --create-replicate-table --databases=目标库 --tables=目标表 h=主库IP,u=主库用户,p='主库密码',P=3306

    看到以下结果,执行成功。

    1d55d9d08320ea07dced7f0c5d67b059.png

    结果说明:

    ERRORS`:检查时候发生错误和警告的数量。

    `DIFFS`:0表示一致,1表示不一致。

    当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。`

    ROWS`:表的行数。

    `CHUNKS`:被划分到表中的块的数目。

    `SKIPPED`:由于错误或警告或过大,则跳过块的数目。

    `TIME`:执行的时间。

    `TABLE`:被检查的表名。

    展开全文
  • OGG同步的人工数据一致性校验(Oracle到Oracle)
  • 1. 简介项目地址:https://github.com/seanlook/p...主从环境下数据一致性校验经常会用 pt-table-checksum 工具,它的原理及实施过程之前写过一篇文章:生产环境使用 pt-table-checksum 检查MySQL数据一致性。...
  • 所以这两个工具最好运用在以下场景: a)、从服务器提升为主服务器时,在新的主服务器上线时需要与旧的主服务器进行数据一致性检查 b)、数据迁移后,应该进行数据一致性检查 c)、从库被误操作导致数据更新后,应该...
  • Sqoop数据一致性问题 1.mysql空值和hive空值符号不一样,通过加参数可以解决 2.mysql的\n \t 等 字符 与hive的保留字符冲突,通过加参数可以解决 ...如何校验数据一致性 1.行校验 1.1通过元数据 s
  • mysql 数据一致性校验

    2017-11-12 13:59:00
    工作上需要把一个从库提升为主库,但对从库和主库的数据一致性不能保证一样,所以就利用 pt-table-checksum 工作来检查主从的一致性,操作前需要注意的事项: (1)在有些情况下,recursion-method如果不设会报错:...
  • 主从环境下数据一致性校验经常会用 pt-table-checksum 工具,它的原理及实施过程之前写过一篇文章:生产环境使用 pt-table-checksum 检查MySQL数据一致性。但是DBA工作中还会有些针对两个表检查是否一致,而这两...
  • ACMUG沙龙分享第二弹,今天主页君给大家分享一下来自腾讯游戏梁飞龙先生的《腾讯游戏MySQL数据一致性校验及在线修复实践》。 梁飞龙,腾讯游戏互动娱乐运营部/存储与计算资源中心任职游戏云存储...
  • BeeDI提供任意数据库之间(Oracle、SQL Server、MySQL、PostgreSQL、Elasticsearch、Cassandra、MongoDB、Solr等)表的数据比对功能,具体特点如下: 支持异构表的比对(不同表名,目标表字段可多于源表). 支持无...
  • 本发明属于多数据库的联机数据交互领域,具体涉及一种跨机房数据库的数据一致性校验方法。背景技术:伴随着B2B电子商务行业的发展,互联网服务业务越来越多,用户基数也越来越大,为保障可靠性的需求,网站多会部署...
  • 本文分享了MySQL复制数据一致性校验和修复的详细步骤及其自动化实现思路和方法,对MySQL复制架构运维中该项工作的实施及其自动化具有较好的借鉴意义。
  • 幸好percona公司提供pt工具包,其中的pt-table-checksum和pt-table-sync相互配合,在基于一定的前提条件下,可以较好的完成主从数据一致性校验和修复,而不会较大程度上影响线上数据库的性能。 ...
  • 当两个系统的状态数据一致. 前端入口页面处于某个状态,导致无法流转. 流转之前需要校验自己的状态.还要校验前置订单状态.自己的状态通过就调用下游前置状态校验..  (可以不调用,但调用的好处是中国)
  • 主要设计思路和算法主从数据校验的基本思路是,对主数据库某数据表使用一系列算法最终获得一个checksum,再分别从每个从数据库获得相应数据表的checksum进行比对,如果不一致,则表示主从不同步。获得checksum的方法...
  • 今天在开发补货管理模块时,要新增加一...之前在写方法的时候,还没体会到数据一致性的问题。但是昨天由老欧写了一个接口给我看了之后,发现比我写的方法多用到了表里的lastModifiedOn和modifiedBy字段。来校验数据...
  • 今天在开发补货管理模块时,要新增加一个接口,功能是可以修改补货管理表里的订单状态。 在数据库里,由一个orderStatus字段来表示订单的当前状态,而这...之前在写方法的时候,还没体会到数据一致性的问题。但是...
  •  搜狗手机输入法8.6版本近期发布了一个创新的功能:Quickshare,用户通过输入法工具条的Quickshare按钮,可以进行百科、地名、音乐等等类别数据的搜索,搜索结果会直接以卡片形式在输入法中展示。Quickshare功能...
  • 工具完成校验和表时的时间戳 ERRORS:校验表时发生的错误和警告的数量 DIFFS:一个或多个副本上与主节点不同的块的数量,大于0说明这些表数据和主库不一致 ROWS:从表中选择和校验的行数 CHUNKS:表被分成的块的数量...
  • 在测试开发工作中,一般都会接触到期望结果数据与实际结果数据一致性比对的测试场景,对于复杂、庞大数据的比对工作。如果依靠人工执行,其成本相当高,难以保障执行结果的一致性(多次执行可能存在偏差),并且重复性...
  • MySQL非主从环境下数据一致性校验及修复程序1. 简介主从环境下数据一致性校验经常会用 pt-table-checksum 工具,它的原理及实施过程之前写过一篇文章:生产环境使用 pt-table-checksum 检查MySQL数据一致性。但是DBA...
  • 主从数据一致对DBA来说是一个比较头疼的事情,刚接触MySQL时,遇到这种问题我一般采用重新还原备库的方式恢复数据,这对我来说是个很痛苦的过程。今天就来介绍两款pt工具,通过这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 952
精华内容 380
关键字:

数据一致性校验