我目前正在使用MySQL數據庫開發應用程序。 mysql
數據庫結構仍在不斷變化中,而且隨着開發的進展而變化(我更改了本地副本,僅將其保留在測試服務器上)。 sql
有沒有一種方法能夠比較數據庫的兩個實例以查看是否有任何更改? 數據庫
儘管當前只是簡單地丟棄之前的測試服務器數據庫是能夠的,可是隨着測試開始輸入測試數據,它可能會有些棘手。
相同但更多,稍後將在生產中再次發生... 服務器
有沒有一種簡便的方法能夠增量地更改生產數據庫,最好是自動建立一個腳原本對其進行修改? 架構
答案中提到的工具: less
固然有不少方法,可是就我而言,我更喜歡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
對於問題的第一部分,我只是將兩者都作了轉儲並進行比較。 不肯定mysql,可是postgres pg_dump有一個命令只轉儲沒有表內容的模式,所以您能夠查看是否更改了模式。 測試
有一個使用perl編寫的有用工具,稱爲Maatkit 。 它具備多個數據庫比較和同步工具。 ui
Toad for MySQL具備數據和架構比較功能,我相信它甚至能夠建立一個同步腳本。 最重要的是,它是免費軟件。