庫對比工具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.

表明庫字段正常。

(注:缺表的日誌我沒有截,由於寫博客的時候庫裏只有字段不一樣,沒有缺乏表,後期補充)

相關文章
相關標籤/搜索