web-dev-qa-db-ja.com

データベースのバージョン管理と配置のためのソリューション

現在私はダンプスクリプトを使用してgitリポジトリにデータベースをコミットします。 --skip-extended-insert --skip-comments --skip-dump-dateは差分が私に何が変わったのかについての公正な考えを与えることができることを意味しますが、私がマージしようとするとそれはすべて落ちます。

WP_SITEURL、WP_HOME、および他のすべてのWordpressストアのURLが別のホストにインポートするときに更新が必要な場所(テスト、ステージング、本番)

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

主な問題:

  • Wordpressはデータベース全体を通して完全なURLを保存します(非移植性)
  • 他の多くの無関係な記録が変化する
    • auto_increment値(私はこれらを取り除きますが、IDの問題に遭遇しました)
    • タイムスタンプ(潜在的に削除することもできます)
    • transient *レコード...どうすればよいかわかりません

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

11
Jacob Dorman

これは2つの可能な解決策で、どちらも実際には一般的なMySQLバージョン管理ツールですが、あなたのワークフローに適応させることができます。

dbv.php

このツールは、データベースで検出された変更から、基本的にSQLスクリプトである「移行」を作成します。これらのスクリプトはローカルディレクトリに格納されているため、現在のVCSにコミットすることができます(たとえばgit)。

それはPHP Webインターフェースを通して使われます。

_ dbvc _

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

これを以前の類似のものと統合するための懸案事項があるので、それは探すべき何かです。

Wordpressプラグイン

再現可能なワークフローの作成に役立つ可能性のあるいくつかのプラグイン:

私はMYSQLでこれをやっています。

それはすべてのテーブルスキーマとデータをそれら自身のファイルに入れるので、何が変更されたのか簡単に見ることができます。

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

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

edit: 私は私の古いコードにインポートの順番が重要なバグがあるのを見つけました。 --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
2