2011-07-13 27 views
11

我想生成diff-like SQL文件來比較數據庫和MySQL數據庫的結構。 這些文件將在命令行上作爲SQL查詢執行。在命令行上使用免費工具比較兩個MySQL數據庫

在SO和各種論壇上有各種各樣的舊線程,但他們處理UI的工具,用戶應該支付... 此外,我不想直接同步數據庫,但只能通過執行生成的diff SQL腳本。

+0

感謝Galz和ADW的幫助。即使我沒有使用您提供的解決方案,我也會考慮它,所以它很有用。我正在挖掘liquibase atm。請參閱:http://stackoverflow.com/questions/225772/compare-two-mysql-databases這是一個相關的問題(但更廣泛,我的問題特別關於MySQL,命令行和免費工具)。查看http://forum.liquibase.org/#Topic/49382000000251069以及一個例子,看看它是否是一個可行的解決方案。 – Cedric

回答

12

下面將向您展示不同之處(您的問題的第一部分),但輸出結果不能用作補丁文件。

若要比較兩個表:

mysql -u whatever -e "describe table" database1 > file1.txt 
mysql -u whatever -e "describe table" database2 > file2.txt 
diff file1.txt file2.txt 

比較數據:

mysql -u whatever -e "select * from table" database1 > file1.txt 
mysql -u whatever -e "select * from table" database2 > file2.txt 
diff file1.txt file2.txt 

比較數據庫:

mysqldump --extended-insert=FALSE -u whatever database1 > file1.txt 
mysqldump --extended-insert=FALSE -u whatever database2 > file2.txt 
diff file1.txt file2.txt 
4

查看開源的Percona工具包---特別是pt-table-sync實用程序。它使用索引和其他策略的校驗和來快速比較表。它的主要目的是同步副本,但只需稍加額外的工作,這是一個很好的差異化工具。請參閱my full answer about it here

編輯:我忘了提及比較結構是不同的野獸。我使用可以從命令行調用的存儲過程執行此操作,但它可能不是您要查找的內容。

下面是從一個shell腳本的包裝,我寫了顯示模式的diff一個片段:

mysql ${MYSQL_CNF_OPTION} -u ${DB_USER} \ 
-e "USE sys; CALL compareDBs('${DBDIFF_LOCAL_DB1}','${DBDIFF_LOCAL_DB2}');" 

它調用compareDBs存儲過程,這是我從the Artful Software query archive page了。

+0

感謝您的投入Royce – Cedric

+0

感謝分享Royce!不知道[Artful Software query archive page](http://www.artfulsoftware.com/infotree/queries.php)! – antoniom