mysql dif_mysqldiff实现MySQL数据表比较
本文介紹mysqldiff工具來比較數據表結構,并生成差異SQL語句。
mysqldiff類似Linux下的diff命令,用來比較對象的定義是否相同,并顯示不同的地方。
如果要比較數據庫是否一致,可以用另外一個工具:mysqldbcompare(點擊查看教程)。
以下是mysqldiff的用法。
1 安裝
mysqldiff是MySQL Utilities中的一個腳本,默認的MySQL不包含這個工具集,所以需要獨立安裝。
MySQL Utilities下載地址:http://downloads.mysql.com/archives/utilities/。
Windows系統中需提前安裝“Visual C++ Redistributable Packages for Visual Studio 2013”,下載地址:https://www.microsoft.com/en-gb/download/details.aspx?id=40784。
Linux系統在下載頁面選擇對應發行版。
2 語法
mysqldiff的語法格式是:
$ mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4
這個語法有兩個用法:
db1:db2:如果只指定數據庫,那么就將兩個數據庫中互相缺少的對象顯示出來,不比較對象里面的差異。這里的對象包括表、存儲過程、函數、觸發器等。
db1.object1:db2.object1:如果指定了具體表對象,那么就會詳細對比兩個表的差異,包括表名、字段名、備注、索引、大小寫等所有的表相關的對象。
接下來看一些主要的參數:
--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的修改。
3 范例
先創建兩個表。
use study;
create table test1(
id int not null primary key,
a varchar(10) not null,
b varchar(10),
c varchar(10) comment 'c',
d int
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test1';
create table test2(
id int not null,
a varchar(10),
b varchar(5),
c varchar(10),
D int
)ENGINE=myisam DEFAULT CHARSET=utf8 COMMENT='test2';
不使用--skip-table-options,
mysqldiff --server1=root:root@localhost --server2=root:root@localhost --changes-for=server2 --show-reverse --difftype=sql study.test1:study.test2
使用--skip-table-options,
如果需要生成SQL文件,加上輸出就可以了:
mysqldiff --server1=root:root@localhost --server2=root:root@localhost --changes-for=server2 --show-reverse --difftype=sql study.test1:study.test2 > output.sql
說明:執行MySQL語句時可能會遇到這樣錯誤:Error 1054 - Unknown column 'name' in 'aspect'
這是因為mysqldbcompare生成的ALTER語句中,用逗號,拼裝了多條ADD、CHANGE等語句,如果這些語句還包含AFTER關鍵字,就會提示這個錯誤并中斷執行MySQL語句。解決的辦法就是:去除AFTER及其后面的條件。
這可能是MySQL的一個Bug,詳情參考:http://bugs.mysql.com/bug.php?id=34972 和 http://bugs.mysql.com/bug.php?id=60650。
本文僅代表作者個人觀點,不代表SEO研究協會網官方發聲,對觀點有疑義請先聯系作者本人進行修改,若內容非法請聯系平臺管理員,郵箱cxb5918@163.com。更多相關資訊,請到SEO研究協會網www.seoxiehui.cn學習互聯網營銷技術請到巨推學院www.jutuiedu.com。
總結
以上是生活随笔為你收集整理的mysql dif_mysqldiff实现MySQL数据表比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 设置按天分表_MySQL 优
- 下一篇: mysql 允许其他主机访问权限_允许其