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

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 |
+------------------+------------+









  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值