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.
表明库字段正常。
(注:缺表的日志我没有截,由于写博客的时候库里只有字段不一样,没有缺乏表,后期补充)