指示に従って設定したにもかかわらず、レプリケーションセットアップが機能しない場合は、まず、以下の項目をチェックしてください。
エラーログのメッセージをチェックする。多くのユーザがこれを最初に実行せずに多くの時間を浪費している。
マスタがバイナリログに記録しているかどうか。SHOW
MASTER STATUS
でチェックする。記録していれば、Position
はゼロ以外の値になっている。そうでない場合、マスタに
log-bin
オプションを設定していること、および
server-id
を設定していることを確認する。
スレーブが実行しているかどうか。SHOW
SLAVE STATUS
を実行し、Slave_IO_Running
と
Slave_SQL_Running
の値が両方とも
Yes
であることをチェックする。そうでなければ、スレーブオプションを確認する。
スレーブが実行している場合、スレーブがマスタとの接続を確立しているかどうか。SHOW
PROCESSLIST
を実行し、I/O スレッドと SQL
スレッドを見つけ(その表示については、see
項4.11.3. 「レプリケーションの実装の詳細」)、その
State
カラムをチェックする。Connecting to
master
であれば、レプリケーションユーザのマスタでの権限、マスタホスト名、DNS
設定、マスタが実際に実行しているかどうか、マスタがスレーブからアクセス可能かどうかを調べる。
スレーブが以前は実行していたが現在は停止している場合、その理由は通常、マスタで成功したクエリがスレーブで失敗したことにある。マスタのスナップショットを適切に作成しており、スレーブスレッド外でスレーブのデータを変更していなければ、これは発生しないはずである。発生した場合はバグと考えられるので、次のバグレポートのセクションを参照のこと。
マスタで成功したクエリがスレーブでは実行できず、完全データベース再同期(スレーブのデータベースを削除し、マスタの新規スナップショットをコピーする)の実行が難しい場合、以下を試す。
最初に、スレーブのテーブルがマスタのテーブルと異なっていないか確認する。異なっていた場合、どのようにそれが発生したかを見極める。バグの可能性もある。http://www.mysql.com/documentation
でオンライン MySQL
マニュアルの変更ログを読み、それが既知のバグかどうか、またすでに解決されているものであるかどうか確認する。
次に、スレーブのテーブルをマスタのテーブルと同じなるように変更して、START
SLAVE
を実行する。
上記のことを行ってもうまく機能しない場合、または上記のことができない場合は、必要に応じて手動で更新し、マスタからの次の更新を無視しても安全かどうかを判断する。
次のクエリをスキップすることに決定した場合、以下のステートメントを発行する。
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
mysql>START SLAVE;
クエリが AUTO_INCREMENT
または
LAST_INSERT_ID()
を使用しない場合、n
の値は 1 にする。使用する場合、値は 2
にする。AUTO_INCREMENT
または
LAST_INSERT_ID()
を使用するクエリに 2
の値を使用する理由は、そのクエリはマスタのバイナリログでイベントを
2 つ使用するからである。
最新のバージョンにアップグレードし、古いバグを確実に回避する。
スレーブがマスタと完璧に同期して開始し、スレーブスレッド外で誰もテーブルを更新していないと確信がある場合は、バグを報告する。
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.