库对比工具mysqldiff使用
2019獨角獸企業重金招聘Python工程師標準>>>
? ? ?mysqldiff是mysql官方推薦的庫對比工具,MySQL Utilities中的一個腳本。可以比對兩個庫中缺少的表,相同的表缺少的字段。
? ? ?1,下載mysqldiff
? ? ?下載地址:http://downloads.mysql.com/archives/utilities/
? ? ?2,下載mysql-connector(python),否則執行會報錯。因為這個插件是通過python連接器連接的。
? ? ?下載地址:https://dev.mysql.com/downloads/connector/python/?
? ? ?3,命令模板
? ? ?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),又沒有好的習慣可以上線前執行此命令驗證庫的一致性。
常見使用方式如下:
?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.代表庫字段正常。
(注:缺表的日志我沒有截,因為寫博客的時候庫里只有字段不同,沒有缺少表,后期補充)
?
轉載于:https://my.oschina.net/u/1454202/blog/3012292
總結
以上是生活随笔為你收集整理的库对比工具mysqldiff使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 推荐10个CI/CD工具,用于云平台集成
- 下一篇: 关闭或开启memory_target