有時候,須要對比一下測試環境和生產環境中,數據庫的表結構是否有所差別。有兩個經常使用的工具。html
AmpNmp.DatabaseCompare
GUI 界面,支持多種數據庫(MySQL、SQL Server、SQLite)簡單高效,推薦。mysql
mysqldiff
下載安裝
mysqldiff 是命令行工具,其優勢是能夠直接根據差別生成 SQL 語句。ruby
通常直接在本地開發環境安裝,若是是 Windows 環境,須要提早安裝 Visual C++ Redistributable Packages for Visual Studio 2013 。oracle
語法
mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4
mysqldiff 能夠對比兩個數據庫,或只對比表:socket
db1:db2
:若是隻是指定數據庫,那麼就將兩個數據庫中互相缺乏的對象顯示出來,而對象裏面的差別不進行對比;包括表、存儲過程、函數、觸發器等。db1.object1:db2.object1
:若是指定了具體表對象,那麼就會詳細對比兩個表的差別,包括表名、字段名、備註、索引、大小寫等都有的表相關的對象。
參數:函數
--server1
:配置server1的鏈接--character-set
:配置鏈接時用的字符集,若是不顯示配置默認使用「character_set_client」--width
:配置顯示的寬度--skip-table-options
:這個選項的意思是保持表的選項不變,即對比的差別裏面不包括表名、AUTO_INCREMENT,ENGINE, CHARSET等差別。-d DIFFTYPE
,--difftype
:差別的信息顯示的方式,有[unified|context|differ|sql](default: unified),若是使用sql那麼就直接生成差別的SQL這樣很是方便。--changes-for=
:例如–changes-for=server2,那麼對比以sever1爲主,生成的差別的修改也是針對server2的對象的修改。--show-reverse
:這個字面意思是顯示相反的意思,實際上是生成的差別修改裏面同時會包含server2和server1的修改。