MySQL レプリケーションは、マスタサーバが、データベースに対するすべての変更(更新、削除など)をバイナリログ(see 項4.10.4. 「バイナリログ」)に記録することを基本としています。各スレーブサーバは、マスタがそのバイナリログに記録したクエリをマスタから受け取り、データのコピー上で同じクエリを実行できます。
バイナリログは、単に、ある特定の時刻(バイナリログを有効にした瞬間)からの記録であることを理解することが重要です。スレーブにはすべて、マスタでバイナリログを有効にした瞬間のマスタデータベースのコピーが必要です。バイナリログが開始されたときのマスタ上のデータとは違うデータでスレーブを開始すると、そのスレーブは失敗します。
以下の表は、MySQL の異なるバージョン間でのマスタ/スレーブレプリケーションの互換性を示したものです。
マスタ | マスタ | マスタ | マスタ | ||
3.23.33 以降 | 4.0.0 | 4.0.1 | 4.0.3 以降 | ||
スレーブ | 3.23.33 以降 | yes | no | no | no |
スレーブ | 4.0.0 | no | yes | no | no |
スレーブ | 4.0.1 | yes | no | yes | no |
スレーブ | 4.0.3 以降 | yes | no | no | yes |
レプリケーション機能は常により強力な機能へと変化しているので、最新の MySQL バージョンを常に使用することを推奨します。バージョン 4.0 については、マスタとスレーブの両方に同じバージョンの使用を推奨します。例外として、MySQL 4.0.2 はレプリケーション目的には適しません。
注意: マスタを MySQL 3.23 から MySQL 4.0(または 4.1)にアップグレードする場合、古い 3.23 バイナリログを使用してレプリケーションを再開しないでください。4.0 スレーブが混乱する原因となります。アップグレードするマスタが 3.23 で、スレーブが 4.0 の場合は以下の方法で安全にアップグレードできます。
マスタでの更新をすべてブロックする(FLUSH
TABLES WITH READ LOCK
)。
すべてのスレーブがマスタの更新に追いつくのを待つ(マスタで
SHOW MASTER STATUS
を使用し、スレーブで SELECT
MASTER_POS_WAIT()
を使用する)。そして、スレーブで
STOP SLAVE
を実行する。
マスタの MySQL をシャットダウンし、マスタを MySQL 4.0 にアップグレードする。
マスタで MySQL
を再起動する。マスタの新しく作成しされたバイナリログの名前
<name>
を記録する。ファイルの名前を取得するには、マスタで
SHOW MASTER STATUS
を実行する。各スレーブに以下のコマンドを実行する。
mysql>CHANGE MASTER TO MASTER_LOG_FILE='<name>', MASTER_LOG_POS=4;
mysql>START SLAVE;
スレーブも 3.23 から 4.0 にアップグレードする必要がある場合は、最初にスレーブをアップグレードしてください。それぞれをシャットダウンし、アップグレードしてから再起動します。 それから、上記の手順でマスタをアップグレードします。
4.0.0 以降、LOAD DATA FROM MASTER
を使用してスレーブをセットアップできるようになっています。現在のところ、LOAD
DATA FROM MASTER
が動作するのは、マスタのテーブルがすべて
MyISAM
型の場合だけです。また、このステートメントではグローバルに
READ
ロックが掛かるため、テーブルをマスタから転送している間は書き込みできなくなります。MySQL
5.0
でロックフリーのホットテーブルバックアップが導入されると、グローバルの
READ ロックは必要なくなります。
これらの制限のため、現時点では、マスタのデータセットが比較的小さい場合、またはマスタの
READ
ロックが長くなってもかまわない場合だけ、LOAD
DATA FROM MASTER
を使用してください。LOAD DATA FROM
MASTER
の実際の速度はシステムによって異なりますが、だいたいの目安としては、データファイル
1 メガバイトあたり 1
秒と考えてください。これは、マスタとスレーブが同等の
700 MHz Pentium で、100 MBit/秒
ネットワークの接続を想定した基準です。あくまでおおよその目安です。
いったんスレーブを適切に設定して実行すれば、スレーブはマスタに接続して更新処理を待ちます。マスタとの接続が切れた場合、再接続できるまで定期的に接続を再試行し、接続できたら更新のリッスンを再開します。再試行の間隔は、--master-connect-retry
オプションで制御します。デフォルトは 60
秒です。
各スレーブは、終了時点を記録しています。マスタサーバ側では、いくつのスレーブが存在し、どれがいつ更新されたかを記録していません。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.