問題描述

之前已經詢問過如何同步文件以及兩個 Wordpress 安裝之間的數據庫。

對於數據庫級別,答案通常是基本上轉儲一個數據庫並將其插入另一個服務器。這樣做的問題是您最終會丟失在 prod 服務器上可能做出的任何更改。例如,使用指標,評論等…

考慮到這一點,我開始懷疑是否可以擴展 Wordpress ORM,以便您可以生成三角形,然後將其注入到 prod 站點。

有人試過這個,看着它,還是有任何想法或意見?

最佳解決方案

現實是,我們想要的是:http://www.liquibase.org/

Liquibase is an open source (Apache 2.0 Licensed), database-independent library for tracking, managing and applying database changes. It is built on a simple premise: All database changes are stored in a human readable yet trackable form and checked into source control.

但是我們的開發過程並不支持它。我們通常不會通過我們自己編寫的離散腳本修改數據庫,我們使用我們激活的插件。我們不編寫 DML 腳本來修改 look-up 數據,然後我們檢查源代碼控制,我們在管理頁面上使用一個 UI,因此沒有源代碼以供以後用於在遷移期間複製該更改。

但是,我們可以模擬其中的一些 – 使用此頁面上列出的一些工具:

http://stackoverflow.com/q/225772/149060

例如,液態鹼基具有差異特徵,還可以包括對數據的改變。我們可能會將模式和數據差異輸出到腳本,排除 (儘可能) 某些可能包含測試數據 (即 post 等) 的表,然後將腳本應用於生產數據庫。

MySQLDiff(在 StackOverflow 問題上討論) 做模式差異,作者建議用於 table-wise 數據差異的 mysql_coldiff – 兩者都在 perl 中實現,如果 java 工具 (液體基礎) 對於您的服務器來説太資源沉重 – 儘管將數據庫本地化並運行 PC 上的工具解決了這個問題…

如果我們真的要這樣做,我們應該記錄與設置,選項或其他配置更改以及任何模式更改相關的任何 sql,並將記錄的代碼轉換為遷移腳本,以對付我們的生產服務器。播放針對服務器的遷移腳本,複製 wordpress 站點文件 (不包括上傳,如果適用),我們是黃金。

所以,在我看來,最好的方法是開發人員的 migration-builder-plugin,它捕獲我們需要的 sql,存儲它,然後從記錄的代碼生成一個遷移腳本,而不是建立一種在分段和生產之間合併數據庫的方式。似乎也是一個更簡單的問題。

如果我們看看 @bueltge 的測試鈎子調用插件的代碼靈感:https://gist.github.com/1000143(感謝 Ron Rennick 通過 G +指向我的 SAVEQUERIES 方向和關閉掛鈎,導致我找到它)


-- alter it to get the SAVEQUERIES output instead
-- only run while in admin
-- filter out all selects
-- save results out to table in the shutdown hook
-- we could selectively toggle output trapping based on what we were doing at the moment.

例如:

捕獲名稱:激活& 配置插件 XYZ

捕獲狀態切換 – 打開

… 安裝和配置插件 XYZ

捕獲狀態切換 – 關閉

導出遷移腳本:激活& 配置插件 XYZ

按導出按鈕 – 生成一個彈出文本字段與已過濾的陷阱 SQL – 理想的 pre-formatted 作為一個 shell 腳本與命令行調用 mysql 。複製& 將其粘貼到您的遷移代碼文件夾並添加到您的源代碼存儲庫。

注意在工作時切換捕獲和關閉,您將能夠生成完美的遷移腳本,使生產數據庫與您的分段數據庫具有相同的配置。

更好的是,你會有一個腳本 (或系列相同),你可以測試。成像具有可複製,可測試,遷移腳本!

我已經愛上了

還有誰?

次佳解決方案

Database Sync WordPress 插件在兩個服務器之間的數據同步工作非常好。

默認情況下,它會覆蓋所有目標數據,但是我剛剛實現了插件的一些增強功能,只允許您同步特定的數據庫表。這可以幫助您保留您不想覆蓋的評論,用户和其他此類數據。這是否給你你需要的粒度?

我尚未向公眾發佈我的更改,但如果您有興趣,請發送電子郵件至 simon-at-yump.com.au 。如果有人發現這有用或有其他功能請求,請告訴我,我會看看我能做什麼。


更新:我也剛剛發現了 WP-Sync-DB 插件,它是商業 WP-Migrate-DB-Pro 插件的一個分支。它做的非常類似的事情,雖然可能比數據庫同步更波蘭。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。