2015-11-18 4 views
8

バージョン管理mysqlデータ(スキーマ/移行ではない)を作成するパッケージについては、私のオフィスで話がありました。MySQLデータのバージョン管理(スキーマだけではない)

基本的に、このプロセスは次のように動作します。クライアントは、バックエンドを通常どおり使用していて、イメージをWordpressバックエンドのように使用していることに注意してください。クライアントはログインすると "ブランチ"を選択して名前を付ける "新しいユーザー"と言うと、これは完全に新しいデータベースをクローンして、ユーザーがライブで効果を出さずに "支店"で作業できるようにする。クライアントがデータの変更を完了すると、データのブランチを「マスター」(ライブ)にマージします。

マージ時には、ライブと "新規ユーザー"の両方のデータをsqlファイルにエクスポートし、svn diffを実行して変更をマージします。

サイトに変更を加える必要があるクライアントがあっても、そのデータを有効にしたいと思っていて、変更を加えても他の同僚のサイトの変更どちらか。 Gitのようなリポジトリで作業するときに開発者が行うことを基本的に複製します。

また、クライアントがデベロッパー/デモサイトで働いている場合、彼らはライブに入れたい仕事をします。

私はこれが良い考えであるかどうかを理解するために議論を開いたがっていましたか? どのような問題が発生する可能性がありますか? これはデータを扱う際の良いプログラミング方法ですか? このようなものは既に存在しますか?

+0

Doctrineのschema:update関数はこれと似ていませんか?これはsvnやgitを使っているわけではありませんが、開発データベースを使用してSQLへの変更を実行し、データを失うことなくデータベースに変更をコミットすることができます。 –

答えて

3

データベース(特にそのデータ)は、データベースでは拡張性がよくないため、バージョン管理システムにはほとんど格納されません。あなたのケースでは

、あなたが特にmysqldump can produce a delimited text formatいるので、仕事ができるではないすぎ多くのデータを、持っている場合(以前のバージョンに対してdiffをする機会を持っている)

私はまだ別のGitのレポをお勧めしますスキーマとデータの両方の変更を管理する専用のツールです。たとえば、LiquidBaseは「データベースのソース管理」を提供します。
専用データベースとしてoff-scaleもあります。

これを手動で行う場合は、「Recipes for Continuous Database Integration」に要約された優れた方法があります。でも、スキーマのmentioned hereとして

は、:

私は、適用し、データベーススキーマの変更が確実に関係の依存関係の順序があり、同様に、総合的なステップバイステップの計画なしで行うとすることができないというハードな方法を学びました重要。
「現在の」スキーマまたは「終了」スキーマを保存するだけでは不十分です。遡及的に適用することができない多くの変更があり、 A->B->Cと知らずに A->Cが適用され、若干の変更 Bにはマイグレーションロジックや修正が関係する場合があります。

1

単に次のようにあなたの要件です:

  • 同じバックエンドコード;
  • ライブでマスターデータを使用する。
  • 隔離されたデータを処理するエンドユーザー(またはグループ)。
  • エンドユーザーは、データ(DML)のみを変更でき、スキーマ(DDL)は変更できません。

これらが要件であれば、複数のデータベースを使用できます。これらのデータベースは唯一、まったく同じスキーマを共有し、そして

...

  • masterdb
  • branch_demo
  • branch_brian
  • branch_sandbox
  • :MySQLサーバで次のデータベースを考えてみましょうデータは異なります。各支店では、我々は

    • ID
    • 日時を作成し、(おそらくmasterdb)親ブランチを追跡するために、(すなわちDBINFO)特別なテーブルがあり、その他の詳細、アクセス・レベルのような、などbranchname
    • parent_branch
    • CREATED_ON
    • あなたはエンドユーザーは、単にそれらを可能にすることにより、別の支店で作業できるようにすることができ

    lastmod_on秒UIの特定のデータベースを選びます。masterdbはデフォルトとして選択され、LIVEで使用されます。

    • 新しいブランチの作成は、データベースのクローン作成と同じくらい簡単です。
    • 新しいブランチをマスターにマージすることは、MySQLのREPLACEステートメントを使って処理することができました。

    データの変更を追跡したい場合は、アクティビティを記録する特別なテーブルを作成することができます。

+0

あなたは単純にseaprateデータベースへの構造のクローニングを言っているのか、ここで何か違うものを意味しているように、My Sqlでブランチのものを示すチュートリアルを共有できますか? –

+0

seaprateデータベースに構造を複製する –

関連する問題