mysqldiff只能比較兩個數據庫都有的表之間的差異,也就是說它不會生成create語句。
格式:
`mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4`
選項說明
- --server1:MySQL服務器1配置。
- --server2:MySQL服務器2配置。如果是同一服務器,--server2可以省略。
- db1:db2:要比較的兩個數據庫。如果比較不同服務器上的同名數據庫,可以省略:db2。
- --all:比較所有兩服務器上所有的同名數據庫。--exclude排除無需比較的數據庫。
- --run-all-tests:運行完整比較,遇到第一次差異時不停止。
- --changes-for=:修改對象。例如--changes-for=server2,那么對比以sever1為主,生成的差異的修改也是針對server2的對象的修改。
- -d DIFFTYPE,--difftype=DIFFTYPE:差異的信息顯示的方式,有[unified|context|differ|sql],默認是unified。如果使用sql,那么就直接生成差異的SQL,這樣非常方便。
- --show-reverse:在生成的差異修改里面,同時會包含server2和server1的修改。
- --skip-table-options:保持表的選項不變,即對比的差異里面不包括表名、AUTO_INCREMENT、ENGINE、CHARSET等差異。
- --skip-diff:跳過對象定義比較檢查。所謂對象定義,就是CREATE語句()里面的部分,--skip-table-options是()外面的部分。
- --skip-object-compare:默認情況下,先檢查兩個數據庫中相互缺失的對象,再對都存在對象間的差異。這個參數的作用就是,跳過第一步,不檢查相互缺失的對象。
- --skip-checksum-table:數據一致性驗證時跳過CHECKSUM TABLE。
- --skip-data-check:跳過數據一致性驗證。
- --skip-row-count:跳過字段數量檢查。
舉例
目標沒有對應數據庫
mysqldiff --skip-table-options --difftype=sql --changes-for=server2 --server1=root:root@10.63.2.212 --server2=root:yearning@192.168.154.129 test:test
結果:
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 10.63.2.212: ... connected.
# server2 on 192.168.154.129: ... connected.
# WARNING: Objects in server1.test but not in server2.test:
# TABLE: category
# Compare failed. One or more differences found.
比對整個庫
mysqldiff --skip-table-options --difftype=sql --changes-for=server2 --server1=root:root@10.63.2.212 --server2=root:yearning@192.168.154.129 test:test
mysqldbcompare --skip-table-options --difftype=sql --changes-for=server2 --server1=root:root@10.63.2.212 --server2=root:yearning@192.168.154.129 test:test
結果:
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 10.63.2.212: ... connected.
# server2 on 192.168.154.129: ... connected.
# WARNING: Objects in server1.test but not in server2.test:
# TABLE: category
# Compare failed. One or more differences found.
比對指定對象
mysqldiff --skip-table-options --difftype=sql --changes-for=server2 --server1=root:root@10.63.2.212 --server2=root:yearning@192.168.154.129 test.category:test.category
結果:
# server1 on 10.63.2.212: ... connected.
# server2 on 192.168.154.129: ... connected.
# Comparing test.category to test.category [FAIL]
# Transformation for --changes-for=server2:
#
ALTER TABLE `test`.`category`
CHANGE COLUMN id id int(11) unsigned NOT NULL,
ADD COLUMN name varchar(30) NOT NULL AFTER id,
ENGINE=MyISAM;
# Compare failed. One or more differences found.