学习目标:
了解熟悉mysqldbcompare数据库库级别比较工具
mysqldbcompare是官方提供一个可以实现多库或单库比较数据一致工具
下载地址:MySQL :: Download MySQL Utilities (Archived Versions)
或者我的博客:mysql-utilities-1.6.5.tar.gz-MySQL文档类资源-CSDN下载
还需要一个驱动mysql-connector-python-2.1.7-1.el7.x86_64.rpm,从这个资源包里下载:MySQL主从数据校验工具-MySQL文档类资源-CSDN下载
上传目录到/soft/
学习内容:
基于此博客环境做演示:MySQL基于GTID无损同步_零Ⅰ的博客-CSDN博客
1、解压安装mysql-utilities-1.6.5.tar.gz
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
直接依次执行就好
2、安装驱动程序 Connector/Python:
cd /soft
rpm -ivh mysql-connector-python-2.1.7-1.el7.x86_64.rpm
3、案例
示例a、
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 itpuxdb:itpuxdb
示例b、
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test -a
示例c、
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test --changes-for=server1 --difftype=sql -a
示例d、
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test --changes-for=server1 --difftype=context -a
4、演示删除从库的某条数据
演示一、
从库192.168.16.52操作:
mysql -uroot -proot
delete from itpuxdb.itpux_m5 limit 1;
commit;
查看数据是否一致:
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test --changes-for=server2 --difftype=sql -a
因为刚刚从库删除一条数据,所以检测出数据不一样,下面会给出insert into插入语句,把给出的插入语句在从库执行即可。
再次查看数据是否一致,执行:
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test --changes-for=server2 --difftype=sql -a
结果表示主从数据一致。
演示二、生成差异化sql来同步sql
从库192.168.16.52操作:
mysql -uroot -proot
delete from itpuxdb.itpux_m5 limit 1;
commit;
查看数据是否一致:
mysqldbcompare --server1=root:root@192.168.16.51:3306 --server2=root:root@192.168.16.52:3306 --run-all-test --changes-for=server2 --difftype=sql itpuxdb --show-reverse
它会给你出你两条sql语句,一条是从库插入语句,一条是主库删除语句。一般数据不一致,都是把数据添加进去,很少去删掉数据。
总结:
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 检查所有,即使检测到第一个不一致的数据,仍然继续。
可以通过--difftype 选项来定义输出风格。
unified (default)统一的格式输出
context 上下文格式输出
differ differ-style 格式输出
sql SQL 转换语句输出
指定如何显示行丢失或改变的输出:
可以通过使用--format 选项来定义。
grid (default)网格化输出,类似于 mysql 命令行客户端输出
csv 逗号分隔格式输出
tab 制表符格式输出
vertical 类似于 mysql 命令行客户端\G 执行的输出
最左边的 db1 对应于--server1 选项,最右边的 dbx 对应于--server2 选项。
--changes-for=server1: 针对 server1,以 server2 为参照物(默认)
--changes