開発、テスト、本番環境でデータベースをどのように管理しますか?
開発、テスト、運用サーバー間でデータベーススキーマとデータを管理する方法の良い例を見つけるのに苦労しました。 これがセットアップです。各開発者は、アプリとMySQLデータベースを実行する仮想マシンを持っています。彼らが望むことを何でもするのは彼らの個人的なサンドボックスです。現在、開発者はSQLスキーマに変更を加え、データベースをテキストファイルにダンプし、SVNにコミットします。 常に最新のコミット済みコードを実行する継続的インテグレーション開発サーバーをデプロイしたいと考えています。今それを行うと、ビルドごとにSVNからデータベースをリロードします。 「リリース候補」を実行するテスト(仮想)サーバーがあります。現在、テストサーバーへの展開は非常に手動のプロセスであり、通常、SVNから最新のSQLを読み込んで微調整する必要があります。また、テストサーバー上のデータに一貫性がありません。最終的にコミットした開発者がサンドボックスサーバーに保持していたテストデータがすべて得られます。 すべてが機能しないのは、本番環境への展開です。ライブデータをテストデータで上書きすることはできないため、すべてのスキーマ変更を手動で再作成する必要があります。データを操作するためのスキーマ変更または変換スクリプトが多数あった場合、これは非常に困難な作業になる可能性があります。 問題がスキーマだけだった場合は、もっと簡単な問題ですが、データベースには、セキュリティテーブルや権限テーブルのメタデータなど、開発中にも更新される「ベース」データがあります。 これは、継続的インテグレーションとワンステップビルドへの移行において私が目にする最大の障壁です。どのように解決しますか? 補足質問:データベースのバージョンをどのように追跡して、特定のデータベースインスタンスをアップグレードするために実行するスクリプトを知ることができますか?Lanceのようなバージョンテーブルは、標準的な手順の下で言及されていますか? タランティーノへの参照をありがとう。私は.NET環境ではありませんが、DataBaseChangeMangement wikiページが非常に役立つことがわかりました。特にこのPowerPointプレゼンテーション(.ppt) *.sql特定のディレクトリにあるスクリプトの名前をデータベースのテーブルと照合し、そこにないものをファイル名の最初の部分を形成する整数に基づいて順番に実行するPythonスクリプトを作成します。それがかなりシンプルなソリューションである場合、私はそれがそうであると思うので、私はそれをここに投稿します。 これを実行するスクリプトがあります。DBが存在しない場合は初期化し、必要に応じてアップグレードスクリプトを実行します。既存のデータベースをワイプし、ファイルからテストデータをインポートするためのスイッチもあります。約200行なので、投稿しません(興味があれば、ペーストビンに入れても構いません)。