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.
表明庫字段正常。
(注:缺表的日誌我沒有截,由於寫博客的時候庫裏只有字段不一樣,沒有缺乏表,後期補充)