ステートメントがマスターとスレーブの両方で同じエラー (同じエラーコード) を返した場合、エラーログは記録されますが、レプリケーションは継続します。
ステートメントがマスターとスレーブで異なるエラーを返した場合、スレーブ SQL スレッドは終了し、スレーブはそのエラーログにメッセージを書き込み、データベース管理者がそのエラーについて何をするかを決めるまで待ちます。これには、ステートメントがマスターまたはスレーブ上で (両方ではなく) エラーを返した場合が含まれます。この問題に対処するには、手動でスレーブに接続して問題の原因を判断してください。これには、SHOW SLAVE STATUS
が役立ちます。それから問題を解決して START SLAVE
を実行してください。たとえば、スレーブを再起動する前に、存在しないテーブルの作成が必要な場合があります。
このエラーコード検証動作が望ましくない場合は、--slave-skip-errors
オプションでエラーの一部またはすべてを隠す (無視する) ことができます。
MyISAM
などの非トランザクションストレージエンジンの場合、テーブルを不完全に更新してエラーコードを返すだけのステートメントが存在する場合があります。これはたとえば、1 つの行がキー制約に違反する複数行挿入で、または長い更新ステートメントが一部の行を更新したあとに強制終了された場合に発生する可能性があります。これがマスター上で発生した場合は、スレーブはステートメントの実行を予期しますが、同じエラーコードで終了します。そうしない場合は、スレーブ SQL スレッドはすでに説明したように停止します。
マスターおよびスレーブ上で異なるストレージエンジンを使用するテーブル間で複製する場合、同じステートメントが、一方のバージョンのテーブルに実行し、もう一方で実行しないときに異なるエラーを返したり、一方のバージョンのテーブルでエラーが発生し、もう一方では発生しなかったりすることがあることに留意してください。たとえば、MyISAM
は外部キー制約を無視するため、マスター上の InnoDB
テーブルにアクセスする INSERT
または UPDATE
ステートメントで外部キー違反が発生することがあっても、スレーブ上の MyISAM
バージョンの同じテーブルで実行された同じステートメントはこのようなエラーを返さずにレプリケーションが停止します。