MySQLをスレーブとして設定できますかのみ構造の変更を複製しますか? (CREATE
/ALTER TABLE
など)。これには2つの理由があります。
これが不可能な場合、サイト/データベース/サーバー間で実際のデータなしでmysql-datastructuresを同期する他の良い方法は何ですか?いいえ、構造の変更はそれほど頻繁には発生しませんが、十分な数の異なるデータベースがぶら下がっていると、すべてのインスタンスの同期にかなりの時間がかかります。ダウンタイムを制限し、より興味深いジョブに時間を費やしたいと思います;)。
私は通常、mysqldumpを使用してスキーマをダンプします。しかし、私はあなたが説明するように ブラックホールエンジン を使用できると信じています。
ブラックホールはデータを格納しないため、すべてのテーブルをALTER
およびBLACKHOLE
、INSERT
、およびUPDATE
レコードにDELETE
してもデータに影響はありません。
あなたはできる skip-innodb
そして設定default-storage-engine=BLACKHOLE
および作成されたすべてのテーブルは、BLACKHOLE
を無効にできないため、MyISAM
として作成されたテーブルを除いてデフォルトでMyISAM
になります。後でスレーブレプリカントのALTER
にBLACKHOLE
戻る必要がある場合があるため、マスターでテーブルを作成するときは、これに注意する必要があります。
それにもかかわらず、あなたが説明するのは管理上の問題であり、技術的な問題ではありません。インフラストラクチャチームによって維持される少なくとも2つの開発データベースを構成することをお勧めします。
1つ目は、開発データベースです。開発者はこのデータベースにさらにアクセスでき、スクラブされたデータで定期的に更新されます。
2番目のデータベースは、開発者がRWにアクセスできないQAまたはテスト環境になります。これにより、適切なステージングが可能になります。
これらのデータベースは両方とも、データベースに本番環境の変更を加えるIT担当者によって検証され、本番環境へのステージングプロセスの一部として含まれ、環境全体で一貫したスキーマが保証されます。
開発者にデータベースをあちこちに配置してもらいたい場合、データベースを維持することはできず、データセットがニーズに対して十分に最新であることを保証するのは開発者の責任です。プログラムで、共有ドライブまたはブラックホールレプリケーションスレーブにROアクセス権を持つスキーマダンプを提供できます。
残念ながら、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への変更の一部として、このコマンドを実行してファイルに保存し、ソース管理にプッシュします。開発者はファイルをプルダウンして変更を適用するだけです。
シンボリックリンクについて言及したので、MySQLのインスタンス、または複数のデータベースが同じサーバー上にあるか、同じドライブにアクセスできると仮定します。
これを想定して、マスターの.frmをスレーブの.frmにシンボリックリンクしてみます。このように、マスターが構造の変更で更新されるたびに、スレーブは自動的に更新されますが、データを共有しません。私は実際にこれを試していませんが、理論的には機能するはずです。
"各MyISAMテーブルは3つのファイルでディスクに保存されます。ファイルの名前はテーブル名で始まり、ファイルタイプを示す拡張子が付いています。frmファイルにはテーブル形式が保存されます。データファイルには.MYD(MYData)拡張子。インデックスファイルの拡張子は.MYI(MYIndex)です。 "