データベースのバージョン管理と導入のためのソリューション?


11

現在、私はダンプスクリプトを使用して、データベースをgitリポジトリにコミットしています。 --skip-extended-insert --skip-comments --skip-dump-dateつまり、diffは何が変更されたのかを大まかに知ることができますが、マージしようとするとすべてが失敗します。

WP_SITEURL、WP_HOME、およびワードプレスが格納する他のすべての場所の完全なURLは、別のホストにインポートするときに更新が必要です(テスト、ステージング、本番)。

誰かがより良い方法を使用していますか?

主な問題:

  • Wordpressはデータベース全体に完全なURLを保存します(移植不可)
  • 他の多くの無関係なレコードが変更される
    • auto_increment値(私はこれらを取り除くだけですが、IDの問題が発生しています)
    • タイムスタンプ(場合によっては取り除かれることもあります)
    • 一時的な *レコード...それらの処理方法がわからない

タイムスタンプ付きの移行を作成し、追加または削除したもののみを使用するプロセスが理想的ですが、それが可能かどうかわかりません。


すべてのデータ変更をバージョン管理しますか、それとも構造の変更のみをバージョン管理しますか?それがあなたの本当のビジネスタスクですか?
レイジーバジャー

ワードプレスのようなCMSに変更を加える場合、多くの場合、ロジック(コード)の変更とともにコンテンツと構成(DBデータ)の変更があります。両方をバージョン管理できるようにしたいと思います。構造の変更は良いスタートです... BUSINESS TASK:クライアントは新しいウィジェットを要求します。ステージングサーバーにプラグインをインストールし、リポジトリにコミットします->プラグインを設定してサンプルコンテンツを追加します->承認されたら、コードの変更を本番環境にプルし、プロダクション管理者に同じデータの変更を手動で行います。
Jacob Dorman 2014年

1
@JacobDorman私はこれとまったく同じ問題を解決しようとしています。もう何か解決しましたか?いくつかの調査の後、特定の更新スクリプトを作成するカスタムプラグインが必要だと考え始めています(おそらく、インストールされたプラグインや構成オプションなどの構成変更のみをエクスポートし、必ずしも投稿、カテゴリ、コンテンツ一般をエクスポートする必要はありません)。 。他にアイデアがあればぜひ聞いてください。
ビクトル・ロペス・ガルシア

回答:


4

以下に2つの可能なソリューションを示します。どちらも実際には汎用のMySQLバージョン管理ツールですが、ワークフローに適合させることができます。

dbv.php

このツールは、データベースで検出された変更から、基本的にSQLスクリプトである「マイグレーション」を作成します。これらのスクリプトはローカルディレクトリに保存されるため、現在のVCS(gitなど)にコミットできます。

PHPのWebインターフェイスを介して使用されます。

DBVC

基本的に前のツールと同様に、これはコマンドラインインターフェースに基づいています。それはjsonファイルを介して設定されます。主な違いは、移行ファイルが自動生成されないことです。

これを以前の類似のものと統合するための保留中の問題があるので、それを探す必要があります。

Wordpressプラグイン

繰り返し可能なワークフローの作成に役立ついくつかのプラグイン:


dbvcは、私が探していた種類のツールのように見えます。ありがとう!
Jacob Dorman 2014

1
お役に立てて嬉しいです。:私はちょうどそれがしばらく更新されていない、別の興味深いツールを見つけましたが、で戦利品を取る価値があるかもしれませんgithub.com/idler/MMP
ビクトル・ロペス・ガルシア

@JacobDorman DBVCを使用すると、さまざまな環境からのDBの変更を正常にマージできますか?私は独自の戦略を構築しましたが、 DBVCは更新ファイルを生成しますか、それとも SQLダンプ間でmysqldiffなどを使用する必要がありますか?実際に比較可能なSQLの違い、特にINSERTステートメントのパラメーターを別の行に生成するのに役立つ場合を除いて、このツールが役立つとは思えません...ファイルを編集してそれを処理できると思います...
Spencer Williams

@SpencerWilliams私は最終的にDBVCを使用しなかった(そしてmysqldiffを使用しなかった)が、バージョン管理にdbダンプを追加している...ほとんどの場合、それらをマージ可能とは実際には思わないが、beyond compareを使用して比較するとハイライトに役立つ変更と問題。
Jacob Dorman

@victor MMPをチェックアウトしました。スキーマの変更は行いますが、データの差分/挿入は行いません。
David Silva Smith

2

私はこれをMYSQLで実行しています。

すべてのテーブルスキーマとデータを独自のファイルに配置するので、変更点を簡単に確認できます。

このスレッドの他のほとんどのソリューションとは異なり、このソリューションはデータを取得します。これはCMSにとって重要です。

このソリューションでは、ツールを使用せず、コマンドラインスクリプトのみを使用します。

編集:古いコードには、インポートの順序が重要なバグがあることがわかりました。--compactフラグを外すとバグが修正されます。

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

古いコード

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

ここにインポートする方法があります

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.