库对比工具mysqldiff使用

     mysqldiff是mysql官方推荐的库对比工具,MySQL Utilities中的一个脚本。能够比对两个库中缺乏的表,相同的表缺乏的字段。python

     1,下载mysqldiffmysql

     下载地址:http://downloads.mysql.com/archives/utilities/linux

     2,下载mysql-connector(python),不然执行会报错。由于这个插件是经过python链接器链接的。sql

     下载地址:https://dev.mysql.com/downloads/connector/python/ 安全

     3,命令模板socket

     mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4工具

      这里讲的是两种用法。能够直接对比库,db3:db4 ,也能够对比表 db1.table1:db2.table2测试

  • --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的修改。
  • --force:完成全部的比较,不会在遇到一个差别以后退出
  • -vv:便于调试,输出许多信息
  • -q:quiet模式,关闭多余的信息输出

     4,对于创业公司来说,没有严格的正式环境(dba维护,上线提sql给dba),又没有好的习惯能够上线前执行此命令验证库的一致性。ui

常见使用方式以下:spa

 mysqldiff  --server1=:xxx:xxx@xxx.xxx.xxx.xxx:3306 --server2=lxxx:lixxx@xx.xx.xx.xx:3306 --changes-for=server1 --skip-table-options --force db1:db2

执行上述命令,若是出现对比失败,见下图:

# WARNING: Using a password on the command line interface can be insecure. linux提示密码用在命令行不安全
# server1 on xxx.xxx.xxx.xxx: ... connected. 库1链接成功
# server2 on xxx.xx.xx.xx: ... connected. 库2链接成功
# Comparing `db1` to `db2`                             [PASS] 开始比对库1库2
# Comparing `dba1`.`table1` to `db2`.`table1`   [PASS]  库1的table1和库2的同名table1相同
--- `db1`.`table2` 发现库1的table2和库2同名的table2 出现不一样  --表明server1的 ++表明server2
+++ `db2`.`table2` 
@@ -2,10 +2,10 @@ 
   `id` int(11) NOT NULL AUTO_INCREMENT,  相同
   `merchant_id` bigint(11) NOT NULL DEFAULT '0' COMMENT '商户id',   相同
   `merchant_name` varchar(100) NOT NULL DEFAULT '' COMMENT '商户名称',  相同
-  `login_name` varchar(45) NOT NULL DEFAULT '' COMMENT '登陆名',       table2差别 db1的loginname
-  `login_password` varchar(45) NOT NULL DEFAULT '' COMMENT '登陆密码', table2差别 db1的login_password
+  `login_name` varchar(45) NOT NULL DEFAULT '' COMMENT '登陆名 暂时没用', table2差别 db2的loginname
+  `login_password` varchar(45) NOT NULL DEFAULT '' COMMENT '登陆密码 暂时没用', table2差别db2的login_password 
(发现注释中,db2的注释多了暂时没用)
# Compare failed. One or more differences found.  比对失败,结束

 执行上述命令,对比成功,见下图:

# WARNING: Using a password on the command line interface can be insecure. linux提示密码用在命令行不安全
# server1 on xxx.xxx.xxx.xxx: ... connected. 库1链接成功
# server2 on xxx.xx.xx.xx: ... connected. 库2链接成功
# Comparing `db1` to `db2`                             [PASS]
# Comparing `db1`.`table1` to `db2`.`table1`   [PASS]
# Comparing `db1`.`table2` to `db2`.`table2`               [PASS]
# Success. All objects are the same.

表明库字段正常。

(注:缺表的日志我没有截,由于写博客的时候库里只有字段不一样,没有缺乏表,后期补充)

相关文章
相关标签/搜索