マスターサーバーをシャットダウンしてあとで再起動することは安全です。スレーブがマスターへの接続を失った場合、スレーブはすぐに再接続しようとし、それが失敗した場合は定期的に再試行します。デフォルトでは 60 秒ごとに再試行します。これは、CHANGE MASTER TO
ステートメントで変更できます。スレーブはネットワーク接続停止にも対応できます。ただし、スレーブは、マスターからのデータを slave_net_timeout
秒間受け取らなかったあとにのみ、ネットワーク停止を認識します。停止時間が短い場合は、slave_net_timeout
を減らすことをお勧めします。セクション5.1.4「サーバーシステム変数」を参照してください。
マスター側で予期しないシャットダウン (たとえば、クラッシュ) が発生すると、マスターバイナリログファイルがフラッシュされていないため、マスターバイナリログにスレーブが読み取った最新の位置より前の最終位置が記録される可能性があります。このため、マスターが復帰したときにスレーブを複製できないことがあります。マスター my.cnf
ファイルで sync_binlog=1
を設定することは、マスターがそのバイナリログをフラッシュする頻度が上がることになるため、この問題を最小化するのに役立ちます。
スレーブをクリーンにシャットダウンすることは、中断した場所が追跡されるため安全です。ただし、スレーブが一時テーブルを開いていないことを考慮してください。セクション17.4.1.22「レプリケーションと一時テーブル」を参照してください。予期しないシャットダウンにより問題が発生する場合があります (特に、ディスクキャッシュがディスクにフラッシュされない状態で問題が発生した場合)。
トランザクションについては、スレーブはコミットしてから
relay-log.info
を更新します。これら 2 つの操作の間にクラッシュが発生した場合、リレーログ処理はファイルが示す情報より先に進み、スレーブは再起動されたあとにリレーログ内の最後のトランザクションからイベントを再実行します。同様な問題は、スレーブが
relay-log.info
を更新したけれども、その書き込みがディスクにフラッシュされる前にサーバーホストがクラッシュした場合にも発生する可能性があります。これが発生する可能性を最小化するには、スレーブmy.cnf
ファイルにsync_relay_log_info=1
を設定してください。sync_relay_log_info
のデフォルト値は 0 で、この場合はディスクへの書き込みは強制されません。サーバーはオペレーティングシステムに依存して随時ファイルをフラッシュします。
システムのこのような問題に対する耐障害性は、優れた無停電電源があると大幅に向上します。