比較兩個MySQL數據庫[關閉]

我目前正在使用MySQL數據庫開發應用程序。 mysql

數據庫結構仍在不斷變化中,而且隨着開發的進展而變化(我更改了本地副本,僅將其保留在測試服務器上)。 sql

有沒有一種方法能夠比較數據庫的兩個實例以查看是否有任何更改? 數據庫

儘管當前只是簡單地丟棄之前的測試服務器數據庫是能夠的,可是隨着測試開始輸入測試數據,它可能會有些棘手。
相同但更多,稍後將在生產中再次發生... 服務器

有沒有一種簡便的方法能夠增量地更改生產數據庫,最好是自動建立一個腳原本對其進行修改? 架構


答案中提到的工具: less


#1樓

固然有不少方法,可是就我而言,我更喜歡dump和diff命令。 因此這是一個基於賈裏德評論的腳本: 工具

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

歡迎反饋:) post


#2樓

對於問題的第一部分,我只是將兩者都作了轉儲並進行比較。 不肯定mysql,可是postgres pg_dump有一個命令只轉儲沒有表內容的模式,所以您能夠查看是否更改了模式。 測試


#3樓

有一個使用perl編寫的有用工具,稱爲Maatkit 。 它具備多個數據庫比較和同步工具。 ui


#4樓

看看http://www.liquibase.org/


#5樓

Toad for MySQL具備數據和架構比較功能,我相信它甚至能夠建立一個同步腳本。 最重要的是,它是免費軟件。

相關文章
相關標籤/搜索