現実には、これは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のコマンドライン呼び出しでシェルスクリプトとして事前にフォーマットされています。コピーして移行コードフォルダーに貼り付け、ソースコードリポジトリに追加します。
作業中にキャプチャのオンとオフを切り替えることに細心の注意を払うと、実稼働データベースをステージングデータベースと同等の構成にするための完璧な移行スクリプトを生成できるようになります。
さらに良いのは、テストできるスクリプト(または同じもの)があることです。複製可能でテスト可能な移行スクリプトを備えたイメージング!!
私はすでに恋をしています。
他に誰か?