web-dev-qa-db-ja.com

サードパーティの拡張機能によって行われたデータベースの変更を検出する方法はありますか?

私は開発/ステージング/本番環境で働いており、特にJoomlaや他のサードパーティソフトウェアへのアップグレードが必要な場合に、ある環境から別の環境にコードをプロモートするいくつかの課題に直面しています。

特定の日付以降にデータベースに対して実行されたSQLステートメントを確認して、各環境をアップグレードすることなく、異なる環境に適用できるようにする方法はありますか?

7
ContextSwitch

単純な答えはノーです。

Mysqlはクエリをログに記録できますが、制限があります。環境間に1つでも違いがあると、クエリが機能しなくなります。それでも、それを行う唯一の方法はサーバー自体です。私が知る限り、JDatabaseに特別なログが追加されていないためです(コンポーネントがJDatabaseを使用しない場合、コントロールはさらに低下します)。

上記のように、完璧な世界で見ることができる方法がありますが、開発からライブに移行すると、現在独自にクエリを実行していたライブサイトがあり、現在の開発/ステージングとは「異なる」バージョン。したがって、ユーザーがライブサイトにサインアップし、開発者がJoomlaをアップグレードした場合、ユーザーテーブルを更新すると、そのユーザーを手動で再追加する必要が生じます(テーブル構造も変更される可能性があります)。ここで、1人のユーザーではなく、10人、さらには100人のユーザーを想像してください。プロセスは自動化できません。

Joomlaにはいくつかのニース更新機能があり、テーブルのバージョンmysql更新のバージョンを許可します。これにより、テーブルはクエリに必要な構造を維持しますが、テーブルの挿入や更新は追跡されないため、開発環境で更新した場合、本番環境で更新する最良の方法は、同じ手順に従って、本番環境でも更新することです。

将来的には、Joomlaがコアでデータベースの変更を追跡し、本番バージョンを開発バージョンに同期できるようになる可能性がありますが、そのようなものを構築するための作業量は非常に多く、パフォーマンスに影響を及ぼします。現在、私はそれがあるとは考えていません。

9
Jordan Ramstad

データベースは、すべてのソフトウェア開発で大きな問題になる傾向があります。特にステージングサイトやプロダクションサイトでは、同期を維持することも私たちにとって大きな問題です。

私が最近検討し始めたがまだ実装されていないことの1つは次のとおりです。

http://phinx.org/

もう1つの「貧弱な方法」は、DBスキーマをエクスポートし(スキーマに関心がある場合、データはおそらく別の動物です)、各データベースのスキーマに対してdiffを実行することです。かなり簡単に違いを明らかにする必要があります。次に、データを統合するだけです。それで、私は言いがちですが、理想的には、本番環境のデータについてのみ心配し、ステージング環境と同期を保つ必要があるだけです。その後、必要に応じてサンドボックス化し、開発をいじることができます。

4
Chad Windnagle