devとprod間のWordpressデータベースの同期


19

以前に、2つのWordpressインストール間でファイルとデータベースを同期する方法について質問がありました。

データベースレベルの場合、答えは通常、基本的に1つのデータベースをダンプし、別のサーバーに挿入することです。これに伴う問題は、prodサーバーで行われた可能性のある変更が失われることです。たとえば、使用メトリック、コメントなど...

これを念頭に置いて、Wordpress ORMを拡張して、デルタを生成し、それらをprodサイトに挿入できるようになるのではないかと考え始めました。

誰もがこれを試したり、調べたり、アイデアやコメントを持っていますか?


1
はい、私はそれを調べましたが、あまり達成していません。別のCMSプラットフォームで概念実証を指すことができれば、WordPress向けに再検証できると確信しています。
EAMann

レプリケーションはどうですか?
コブシェニン

mysqlを使用したレプリケーションには、PITAである何らかの形式のマスターマスタレプリケーションが必要です。これがdevとprodの間にあるという事実を考慮に入れると、レプリケーションを遅らせる必要があり、ほとんどの場合、常に中断します。
ジョナサンセラフィニ

回答:


11

現実には、これはhttp://www.liquibase.org/です

Liquibaseは、データベースの変更を追跡、管理、および適用するための、データベースに依存しないオープンソース(Apache 2.0ライセンス)ライブラリです。これは、単純な前提に基づいて構築されています。すべてのデータベースの変更は、人間が読み取れるが追跡可能な形式で保存され、ソース管理にチェックインされます。

ただし、開発プロセスではサポートされていません。通常、独自のスクリプトを使用してデータベースを変更するのではなく、アクティブ化するプラグインを使用します。ルックアップデータを変更するためのDMLスクリプトを記述せず、ソースコード管理にチェックインします。管理ページでUIを使用するため、後で移行中にその変更を複製する際に使用するソースコードはありません。

ただし、このページにリストされているいくつかのツールを使用して、その一部をエミュレートできます。

/programming//q/225772/149060

たとえば、liquidbaseにはdiff機能があり、オプションでデータの変更も含まれます。スキーマとデータdiffをスクリプトに出力し、テストデータ(ポストなど)を含む可能性のある特定のテーブルを(可能な限り)除外してから、本番データベースにスクリプトを適用できます。

MySQLDiff(StackOverflowの質問で議論されます)はスキーマの差分を行い、著者はテーブルごとのデータの差分に対してmysql_coldiffを推奨してます-Javaツール(リキッドベース)がサーバーにとってリソースが多すぎる場合は両方ともperlで実装されますPCでツールを実行すると、その問題が解決されます...

本当に正しく実行したい場合は、設定、オプション、またはその他の構成の変更、およびスキーマの変更に関連するsqlをログに記録し、ログに記録されたコードを移行スクリプトに変換して、運用サーバーに対して実行する必要があります。サーバーに対して移行スクリプトを再生し、ワードプレスサイトファイルをコピーします(該当する場合、アップロードを除きます)。

だから、最良の方法は、データベースをマージする方法を構築するのではなく、必要なSQLをトラップし、保存し、ログされたコードから移行スクリプトを生成する開発者のmigration-builder-pluginであるように思えますステージングと本番の間。単純な問題も解決するようです。

@bueltgeのインスツルメントフックのコードを見ると、インスピレーションを得るためのプラグインが呼び出されます:https : //gist.github.com/1000143それを見つけるように私を導く)

-代わりにSAVEQUERIES出力を取得するように変更します 
-管理者でのみ実行 
-すべての選択を除外 
-シャットダウンフックで結果をテーブルに保存する 
-現在行っていることに基づいて、出力トラップを選択的に切り替えることができます。  

例えば:

名前のキャプチャ:プラグインXYZのアクティブ化と構成

状態の切り替えをオン-オン

...プラグインXYZをインストールして構成する

状態のキャプチャの切り替え-オフ

移行スクリプトのエクスポート:プラグインXYZのアクティブ化と構成

エクスポートボタンを押して、フィルタリングされたトラップされたSQLを含むポップアップテキストフィールドを作成します-理想的には、mysqlのコマンドライン呼び出しでシェルスクリプトとして事前にフォーマットされています。コピーして移行コードフォルダーに貼り付け、ソースコードリポジトリに追加します。

作業中にキャプチャのオンとオフを切り替えることに細心の注意を払うと、実稼働データベースをステージングデータベースと同等の構成にするための完璧な移行スクリプトを生成できるようになります。

さらに良いのは、テストできるスクリプト(または同じもの)があることです。複製可能でテスト可能な移行スクリプトを備えたイメージング!!

私はすでに恋をしています。

他に誰か?


2
すてきな記事。クライアントが私たちの助けを求めているので、私はこの問題に多くの時間を費やしてきました。これは非常に難しい問題ですが、SQLのレベルまで下げることは、おそらく「海を沸かす」ソリューションであると判断しました。つまり、SQLを100%動作させる可能性は低いと判断しました。解決策は、WordPressの構造を理解し、他のすべてのフックを提供する明示的なコードで「分割統治」アプローチを使用することだと思います。将来のある時点で実行可能なソリューションを公開できることを願っています。
マイクシンケル

だから...誰がこれを作りたいですか?
Daveはキス

探している人にとっては、この同じ考えがプラグインとして利用可能であるようです:wordpress.org/plugins/query-recorder
majick

3

データベースの同期 WordPressのプラグインは、 2つのサーバー間でデータを同期する素晴らしい仕事をしていません。

デフォルトでは、すべての宛先データを上書きしますが、特定のデータベーステーブルのみを同期できるプラグインにいくつかの機能強化を実装しました。これにより、コメント、ユーザー、その他の上書きされたくないデータを保持できます。それはあなたに必要な粒度を与えますか?

まだ公開していませんが、コピーに興味がある場合は、simon-at-yump.com.auにメールを送ってください。誰かがこれを便利だと思ったり、追加の機能リクエストがある場合はお知らせください。何がで​​きるか見ていきます。


更新:WP-Sync-DBプラグインも見つけました。これは、商用のWP-Migrate-DB-Proプラグインのフォークです。これは非常によく似ていますが、おそらくDatabase Syncよりも洗練されています。


0

このタスク専用の比較的新しい商用サービスがあります。RAMPと呼ばれます:

http://alexking.org/blog/2011/07/20/ramp-content-deploy-wordpress


1
このサービスには、私のユースケースに合わない制限があります
。– marfarma

2
私のユースケース-生産中に機能を追加してコンテンツを追加します。引用:「現在、次の項目はサポートされていません:設定(コアとプラグインの設定、RAMPにオプトインしない限り)」テーマとプラグインのオプションと設定の99.99%は移行されません。本番環境でコードを変更しないと、カスタムの投稿タイプは移行されません。カスタムテーブルとそのデータの追加は忘れてください。
-marfarma

1
その製品には有効なユースケースがあります-コンテンツをステージングしてからライブ配信します。残念ながら、それは私が心配している問題ではありません。OPに戻って確認すると、どのユースケースを扱っているかは不明です。したがって、それは彼らの店にとって完璧なソリューションかもしれません。
マーファーマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.