MySQL Utilities-mysqldbcompare

mysqldbcompare从两个数据库比较对象和数据的不同。数据库中的对象包括:表、视图、触发器、存储过程、函数和事件。每一个对象类型计数可以使用-vv选项显示。通过一系列步骤检查进行测试,默认情况下,一旦测试失败就终止检测。可以指定--run-all-tests选项来进行所有的测试。
环境:CentOS6.5源码安装多个MySQL实例及复制搭建,之前做复制时Master实例的test库中的数据表没有复制到Slave实例

#使用Master中的test.test1的建表语句创建Slave中的test.test1,修改列c的说明,并插入数据
use test;
create table test1
(id int not null primary key,
a varchar(10) not null,
b varchar(10),
c varchar(10) comment ‘cc‘,
d int
)
ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘test1‘;
insert into test1 values(1,‘a‘,‘b‘,‘c‘,1);

此时两表的定义和数据是不一致的。
比较检测的步骤
1、数据库定义的检查 检查对比的数据库是否存在

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test1
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
ERROR: The database test1 does not exist.

2、检测数据库的对象 检查两者数据库中的对象是否丢失。可以使用--skip-object-compare选项跳过这步。

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
ERROR: The list of objects differs among database test and test.

3、比较对象的定义 对对象的定义(CREATE语句)进行比较和显示不同。可以使用--skip-diff选项跳过这步。

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --skip-object-compare
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   FAIL    ERROR: The object definitions do not match.

4、检测表的行数 检查表是否有相同的行数,但这并不确保表的数据是一致性的。可以使用--skip-row-count选项跳过这步。

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --skip-object-compare --skip-diff
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   SKIP    FAIL    ERROR: Row counts are not the same among `test`.`test1` and `test`.`test1`.

5、检测表数据的一致性 检查行数同时检查数据是否一致,两表需要有主键或唯一索引。可以使用--skip-checksum-table选项跳过表校验,使用--skip-data-check选项跳过数据检查。

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --skip-object-compare --skip-diff --skip-row-count
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   SKIP    SKIP    -
#           - Compare table checksum                                FAIL
#           - Find row differences                                  FAIL
#
# Transformation for --changes-for=server2:
#

DELETE FROM `test`.`test1` WHERE `id` = ‘1‘;

#
# Transformation for reverse changes (--changes-for=server1):
#
# INSERT INTO `test`.`test1` (`id`, `a`, `b`, `c`, `d`) VALUES(‘1‘, ‘a‘, ‘b‘, ‘c‘, ‘1‘);
#

# Database consistency check failed.
#
# ...done
#使用--skip-checksum-table选项跳过表校验
[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --skip-object-compare --skip-diff --skip-row-count --skip-checksum-table
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   SKIP    SKIP    -
#           - Compare table checksum                                SKIP
#           - Find row differences                                  FAIL
#
# Transformation for --changes-for=server2:
#

DELETE FROM `test`.`test1` WHERE `id` = ‘1‘;

#
# Transformation for reverse changes (--changes-for=server1):
#
# INSERT INTO `test`.`test1` (`id`, `a`, `b`, `c`, `d`) VALUES(‘1‘, ‘a‘, ‘b‘, ‘c‘, ‘1‘);
#

# Database consistency check failed.
#
# ...done
#使用--skip-data-check选项跳过数据检查
[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --skip-object-compare --skip-diff --skip-row-count --skip-checksum-table --skip-data-check
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   SKIP    SKIP    SKIP   

# Databases are consistent given skip options specified.
#
# ...done

在做Find row differences操作时,会将下面语句写到二进制日志

指定--run-all-tests选项来进行所有的检测

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql test:test --run-all-tests
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases test on server1 and test on server2
#
# WARNING: Objects in server1.test but not in server2.test:
#        TABLE: test2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# TABLE     test1                                   FAIL    FAIL    -
#           - Compare table checksum                                FAIL
#           - Find row differences                                  FAIL
#
# Transformation for --changes-for=server2:
#

ALTER TABLE `test`.`test1`
  CHANGE COLUMN c c varchar(10) NULL COMMENT ‘c‘;

#
# Transformation for reverse changes (--changes-for=server1):
#
# ALTER TABLE `test`.`test1`
#   CHANGE COLUMN c c varchar(10) NULL COMMENT ‘cc‘;
#

# Row counts are not the same among `test`.`test1` and `test`.`test1`.
#
# Transformation for --changes-for=server2:
#

DELETE FROM `test`.`test1` WHERE `id` = ‘1‘;

#
# Transformation for reverse changes (--changes-for=server1):
#
# INSERT INTO `test`.`test1` (`id`, `a`, `b`, `c`, `d`) VALUES(‘1‘, ‘a‘, ‘b‘, ‘c‘, ‘1‘);
#

# Database consistency check failed.
#
# ...done

检测做复制的sakila库

[[email protected] ~]# mysqldbcompare --server1=mydba:[email protected]192.168.85.129:3306 --server2=mydba:[email protected]192.168.85.129:3307 --changes-for=server2 --show-reverse --difftype=sql sakila:sakila
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 192.168.85.129: ... connected.
# server2 on 192.168.85.129: ... connected.
# Checking databases sakila on server1 and sakila on server2
#
#                                                   Defn    Row     Data
# Type      Object Name                             Diff    Count   Check
# -------------------------------------------------------------------------
# FUNCTION  get_customer_balance                    pass    -       -
# FUNCTION  inventory_held_by_customer              pass    -       -
# FUNCTION  inventory_in_stock                      pass    -       -
# PROCEDURE film_in_stock                           pass    -       -
# PROCEDURE film_not_in_stock                       pass    -       -
# PROCEDURE rewards_report                          pass    -       -
# TABLE     actor                                   pass    pass    -
#           - Compare table checksum                                pass
# TABLE     address                                 pass    pass    -
#           - Compare table checksum                                pass
# TABLE     category                                pass    pass    -
#           - Compare table checksum                                pass
# TABLE     city                                    pass    pass    -
#           - Compare table checksum                                pass
# TABLE     country                                 pass    pass    -
#           - Compare table checksum                                pass
# TABLE     customer                                pass    pass    -
#           - Compare table checksum                                pass
# TABLE     film                                    pass    pass    -
#           - Compare table checksum                                pass
# TABLE     film_actor                              pass    pass    -
#           - Compare table checksum                                pass
# TABLE     film_category                           pass    pass    -
#           - Compare table checksum                                pass
# TABLE     film_text                               pass    pass    -
#           - Compare table checksum                                pass
# TABLE     inventory                               pass    pass    -
#           - Compare table checksum                                pass
# TABLE     language                                pass    pass    -
#           - Compare table checksum                                pass
# TABLE     payment                                 pass    pass    -
#           - Compare table checksum                                pass
# TABLE     rental                                  pass    pass    -
#           - Compare table checksum                                pass
# TABLE     staff                                   pass    pass    -
#           - Compare table checksum                                pass
# TABLE     store                                   pass    pass    -
#           - Compare table checksum                                pass
# TRIGGER   customer_create_date                    pass    -       -
# TRIGGER   del_film                                pass    -       -
# TRIGGER   ins_film                                pass    -       -
# TRIGGER   payment_date                            pass    -       -
# TRIGGER   rental_date                             pass    -       -
# TRIGGER   upd_film                                pass    -       -
# VIEW      actor_info                              pass    -       -
# VIEW      customer_list                           pass    -       -
# VIEW      film_list                               pass    -       -
# VIEW      nicer_but_slower_film_list              pass    -       -
# VIEW      sales_by_film_category                  pass    -       -
# VIEW      sales_by_store                          pass    -       -
# VIEW      staff_list                              pass    -       -      

# Databases are consistent.
#
# ...done

感觉mysqldbcompare的--run-all-tests选项包括了mysqldiff。mysqldiff如果指定数据库(db1:db2),将对比数据库下的对象(不会检查对象的定义);如果指定具体对象(db1.obj1:db2.obj2),将对比其定义。

时间: 2024-08-25 18:23:37

MySQL Utilities-mysqldbcompare的相关文章

MySQL管理工具MySQL Utilities — 介绍与安装(1)

MySQL Utilities介绍 MySQL Utilities 提供一组命令行工具用于维护和管理 MySQL 服务器,包括: 管理工具 (克隆.复制.比较.差异.导出.导入) 复制工具 (安装.配置) 一般工具 (磁盘使用情况.冗余索引.搜索元数据) MySQL Utilities是一系列的命令行工具以及Python库更容易完成管理的任务.库是用Python语言写的,这就意味着不需要安装其他任何工具和库.当前是基于Python2.6版本设计的,不支持Python3.1版本. MySQL Ut

MySQL Utilities

园子看到使用MySQL对比数据库表结构,参考测试发现 [[email protected] uest]# mysqldiff --server1=dba:[email protected] --server2=dba:[email protected] --changes-for=server2 --show-reverse --difftype=sql test.test1:test.test2 bash: mysqldiff: command not found [[email protec

MySQL Utilities管理工具

1.mysqlrplsync工具. 用来检查主从复制的数据一致性的工具. mysqlrplsync --master=check:pass@192.168.152.157:3310--slaves=check:pass@192.168.152.159:3311,check:pass@192.168.152.160:3312 2.mysqlfailover 工具. 用来监控复制状态并实现故障转移的高可用工具. mysqlfailover --master=failover:[email prote

【转】MySQL-Utilities,mysql工具包

原文:https://blog.csdn.net/leshami/article/details/52795777 MySQL Utilities 是一组基于python语言编写的python库的命令行实用工具集,依赖于python 2.6.该工具提供了MySQL数据库运维工程中常用的一些工具,诸如克隆.复制.比较.差异.导出.导入.安装.配置.索引.磁盘查看等等.有了这个工具包,就好比那些个神医大夫,不管大病小病,先去搞个化验,搞个CT,你也可以当华佗.MySQL Utilities提供了各种

Windows下MySQL多实例安装/主从复制/重置密码

Windows创建MySQL多实例 安装MYSQL和实例1 运行mysql-installer-community-5.7.16.0.msi 选择组件 MySQL Server 5.7.16 – X64 MySQL Utilities 1.6.4 – X64 MySQL Workbench 6.3.7 – X64 执行安装 配置端口3306 Windows Service Name设置为MYSQL 复制实例 将C:\ProgramData\MySQL\MySQL拷贝为MYSQL1和MYSQL2文

mysql & vs2013

一 mysql 版本介绍 在mysql的官网http://dev.mysql.com/上,mysql 大致分为两个版本,即免费的社区版(community)和 付费的商业版(commercial).其中商业版又可以细分,详细看官网介绍http://www.mysql.com/products/ community版下载地址:http://dev.mysql.com/downloads/mysql/ 目前出到5.7.5.7和5.6如果下载都是整套的下载,里面包括了以下两个工具及mysql util

MySQL的Auto-Failover功能

今天来体验一下MySQL的Auto-Failover功能,这里用到一个工具MySQL Utilities,它的功能很强大.此工具提供如下功能:(1)管理工具 (克隆.复制.比较.差异.导出.导入)(2)复制工具 (安装.配置)(3)一般工具 (磁盘使用情况.冗余索引.搜索元数据)而我们用它来实现Master-Slave的自动Failover,下面开始 Master:192.168.13.194Slave:192.168.13.159此Failover需要建立在GTID的基础上所以MySQL版本必

Installing MySQL Connector/Python using pip v1.5

The latest pip versions will fail on you when the packages it needs to install are not hosted on PyPI . When you try to install MySQL Connector/Python the usually way, you get following message is: shell> pip install mysql-connector-python Could not

MySQL Study之--Linux下安装MySQL workbench工具

MySQL Study之--Linux下安装MySQL workbench工具 系统环境:      操作系统: RedHat EL6.4(64)      WorkBench: mysql-workbench-community-6.0.9 MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移. MySQ

MySQL简介以及二进制程序方式安装

数据的组织结构 层次型 网状型 关系型 使用DBMS的优点 1,数据管理独立性: 2,有效的完成数据存取: 3,保证数据完整性和安全性: 4,数据的集中管理: 5,并发存储与故障恢复: 6,减少应用程序开发时间: 数据库管理系统(DBMS)设计的目标 为了解决: 1,数据的冗余和不一致: 2,数据访问困难: 3,数据孤立: 4,数据完整性问题: 5,数据原子性问题: 6,并发访问问题: 7,安全性问题: DBMS的组件 1,分析器: 2,计划执行器: 3,优化器: 4,文件的存取方法: 5,缓存