2012-12-08 84 views
9

手動同步確實使生產和開發數據庫處於同步狀態。數據庫同步或遷移工具

有什麼工具可以讓兩個數據庫保持同步嗎?有點像驚人的Laravel framework's migrations的事情?

我正在使用MySQL和PHP。我在這裏和那裏搜索,但無法找到正確的工具。

+0

看一看Liquibase或遷飛。他們在後臺使用Java,但都是簡單的命令行工具來完成工作。 –

回答

-2

如果您只是希望兩個DB相同,那麼爲什麼不使用MySQL作爲主服務器與作爲從服務器的開發服務器進行MySQL複製。

MySQL Replication Docs

+0

在從機上進行的任何更新都會讓地獄混亂和/或中斷複製。只讀從站不會構建好的開發數據庫。 – Charles

+0

是的,我猜想我沒有深入瞭解到他需要開發數據庫的工作。 – shannonman

0

目前尚不清楚你想要什麼......從PROD

  • 一個辦法dev的?
  • data or ddl or both?

看看這個線程:How to synchronize development and production database

+0

同步意味着保持兩者同步:)我的意思是兩種方式 – Dev01

+0

在更隨意的使用,「同步」可以採取意思是鏡像......就像單向同步。你仍然沒有回答:ddl或數據或兩者兼而有之?我會假設ddl ...如果是這樣,請參閱提供的鏈接。 –

1

退房原理,它的設計與YAML或JSON模式文件的工作,它可以在全球安裝:

http://andrefigueira.github.io/Schematic/

它的設計與您的VCS一起承諾,讓您的d數據庫版本與您的項目提交一起存儲。

-2

1。使您的遠程或生產數據庫使用通配符或特殊的IP地址接受遠程連接!通過某種類型的cPanel或配置文件!

2。您可以擴展db artisan命令,如「db:sync」。

3。命令代碼(未測試過):

$db_local = Config::get('database.'.env('DB_CONNECTION', 'db_local')); 
$dump = "tmp.db"; 
exec("mysqldump --user={$db_local['username']} --password='{$db_local['password']}' --host={$db_local['host']} {$db_local['database']} --ignore-table={$db['database']}.some_table > $dump"); 
$db_remote = Config::get('database.'.env('DB_CONNECTION', 'db_remote')); 
exec("mysql --user={$db_remote['username']} --password='{$db_remote['password']}' --host={$db_remote['host']} {$db_remote['database']} < $dump"); 

我並沒有增加任何功能檢查,因爲通常它是打算工作。

例如,您可以代替命令,使用事件,cron作業,聽衆添加一些自動化...有很多選擇,但主要的邏輯部分的技巧是:定義環境變量名稱爲您的兩個DB連接,並在應用程序配置database.php中定義您的連接憑據等,最後使用exec,mysqldump & mysql。

好運