2016-03-02 35 views
2

我有一個mysql數據庫在登臺服務器和生產服務器上的另一個。最初,兩者完全相同。後來,根據模式變化,添加或刪除某些表等,對登臺數據庫進行了一些修改。現在我需要將登臺服務器的數據庫與生產數據庫進行比較,以便我可以部署和更改生產。比較兩個數據庫的任何差異

我知道有一些外部工具可用於此。 但我想知道是否可以使用一些mysql命令來實現此目的,或者編寫python程序來執行此操作。

請讓我知道,如果有人知道這個解決方案。

回答

0

做兩個mysqldump s和運行diff[-du]對他們。

$ mysqldump --databases prod > prod.sql 
$ mysqldump --databases stage > stage.sql 
$ diff -du stage.sql prod.sql 
+0

我只是想比較架構。我不想比較數據。如果我們轉儲它會得到我的sql命令以及數據條目。我對嗎 ?有沒有更好的方法? – yogeshagr

0

Mysqldbcompare可讓您比較兩個數據庫並識別差異。

+0

當我嘗試在Ubuntu 12.04機器上使用「mysqldbcompare」命令時,它說未找到命令。我也安裝了「mysql-workbench」,但同樣的錯誤。任何想法如何在Ubuntu中獲得該命令? – yogeshagr

0

如果你想編寫所有的代碼來完成它,你可以自己分析表,但這不會很簡單(我知道,我已經完成了)。如果你想走這條路線,你只需要在每個數據庫上運行SHOW TABLES查詢,然後對數據庫中的每個表運行SHOW FULL COLUMNS FROM :table,然後構建查詢來更新每個列/表/數據庫。

其他可能更好的選擇是使用現有的工具。 Here's one I wrote in PHP,但它有一個API,或者您可以下載源代碼並將其用作參考。

0

以下事情爲我工作。因爲我只是想比較模式的變化。我不想比較實際的數據。

$ mysqldump -u root -p --databases --no-data staging > stage.sql 
$ mysqldump -u root -p --databases --no-data production > prod.sql 
$ vimdiff stage.sql prod.sql 
+0

這只是偶然的。如果從2個數據庫返回的行按不同的順序怎麼辦? – Kannan