web-dev-qa-db-ja.com

MySQLレプリケート構造のみ

MySQLをスレーブとして設定できますかのみ構造の変更を複製しますか? (CREATE/ALTER TABLEなど)。これには2つの理由があります。

  1. 「メイン」開発データベースからフェッチされた「新鮮な」データ構造で常に機能するコード内の開発ブランチを持つ複数の開発者。
  2. 同じコード/スクリプト(シンボリックリンクされた「コア」ディレクトリを考えてください)を共有するが、データベースが異なる(クライアントごとに1つ)複数のプロジェクト/クライアント。共有部分のコード変更と同時に構造を更新する必要があります。最小限のダウンタイムで、コードの.

これが不可能な場合、サイト/データベース/サーバー間で実際のデータなしでmysql-datastructuresを同期する他の良い方法は何ですか?いいえ、構造の変更はそれほど頻繁には発生しませんが、十分な数の異なるデータベースがぶら下がっていると、すべてのインスタンスの同期にかなりの時間がかかります。ダウンタイムを制限し、より興味深いジョブに時間を費やしたいと思います;)。

2
Wrikken

私は通常、mysqldumpを使用してスキーマをダンプします。しかし、私はあなたが説明するように ブラックホールエンジン を使用できると信じています。

ブラックホールはデータを格納しないため、すべてのテーブルをALTERおよびBLACKHOLEINSERT、およびUPDATEレコードにDELETEしてもデータに影響はありません。

あなたはできる skip-innodbそして設定default-storage-engine=BLACKHOLEおよび作成されたすべてのテーブルは、BLACKHOLEを無効にできないため、MyISAMとして作成されたテーブルを除いてデフォルトでMyISAMになります。後でスレーブレプリカントのALTERBLACKHOLE戻る必要がある場合があるため、マスターでテーブルを作成するときは、これに注意する必要があります。

それにもかかわらず、あなたが説明するのは管理上の問題であり、技術的な問題ではありません。インフラストラクチャチームによって維持される少なくとも2つの開発データベースを構成することをお勧めします。

1つ目は、開発データベースです。開発者はこのデータベースにさらにアクセスでき、スクラブされたデータで定期的に更新されます。

2番目のデータベースは、開発者がRWにアクセスできないQAまたはテスト環境になります。これにより、適切なステージングが可能になります。

これらのデータベースは両方とも、データベースに本番環境の変更を加えるIT担当者によって検証され、本番環境へのステージングプロセスの一部として含まれ、環境全体で一貫したスキーマが保証されます。

開発者にデータベースをあちこちに配置してもらいたい場合、データベースを維持することはできず、データセットがニーズに対して十分に最新であることを保証するのは開発者の責任です。プログラムで、共有ドライブまたはブラックホールレプリケーションスレーブにROアクセス権を持つスキーマダンプを提供できます。

2
Warner

残念ながら、MySQLレプリケーションではそれが許可されていません。定期的にmysqldump -dを実行すると、データベースとテーブルの構造がダンプされますが、データは省略されます。次に、この構造を新しいDBにインポートできます。

man mysqldumpから:

--no-data, -d

          Do not write any row information for the table. This is very useful if
          you want to dump only the CREATE TABLE statement for the table.

私が現在働いている場所でこれを行います。 DBへの変更の一部として、このコマンドを実行してファイルに保存し、ソース管理にプッシュします。開発者はファイルをプルダウンして変更を適用するだけです。

1
vmfarms

シンボリックリンクについて言及したので、MySQLのインスタンス、または複数のデータベースが同じサーバー上にあるか、同じドライブにアクセスできると仮定します。

これを想定して、マスターの.frmをスレーブの.frmにシンボリックリンクしてみます。このように、マスターが構造の変更で更新されるたびに、スレーブは自動的に更新されますが、データを共有しません。私は実際にこれを試していませんが、理論的には機能するはずです。

"各MyISAMテーブルは3つのファイルでディスクに保存されます。ファイルの名前はテーブル名で始まり、ファイルタイプを示す拡張子が付いています。frmファイルにはテーブル形式が保存されます。データファイルには.MYD(MYData)拡張子。インデックスファイルの拡張子は.MYI(MYIndex)です。 "

0
Kyle Buser