kasei_sanのブログ

かせいさんのIT系のおぼえがきです。胡乱の方はnoteとtwitterへ

スレーブのレプリケーションが遅延している時に SHOW SLAVE STATUS でチェックするべき値

前提知識

MySQLのスレーブでは、以下の2つのスレッドを使って、レプリケーションを行っている

  • I/Oスレッド : マスタからバイナリログの差分を取得する
  • SQLスレッド : IOスレッドから取得したバイナリログを元にDBを更新する

SHOW SLAVE STATUS で見るべき値

そもそも起動しているか

  • Slave_IO_Running : IOスレッドの動作有無 Yes なら起動中
  • Slave_SQL_Running : SQLスレッドの動作有無 Yes なら起動中

IOスレッド-SQLスレッド間が遅延しているか

Seconds_Behind_Master を見る

  • Relay_Master_Log_File : SQLスレッドが最後に実行したバイナリログのファイル名
  • Exec_Master_Log_Pos : SQLスレッドが最後に実行したバイナリログのファイル名
  • Seconds_Behind_Master : SQLスレッドとIOスレッドの差異

Seconds_Behind_Master が増えている場合、IOスレッドが渡すバイナリログをSQLスレッドが消化しきれていない

Seconds_Behind_Master が 0 なのに、スレーブが遅延している場合は、マスタ-IOスレッド間の遅延が疑われる

マスタ-IOスレッド間が遅延しているか

以下の値について、マスタの SHOW MASTER STATUS での File, Position と差異を確認する

  • Master_Log_File : IOスレッドが現在最新だと認識しているバイナリログのファイル名
  • Read_Master_Log_Pos : IOスレッドが現在最新だと認識しているバイナリログのポジション

大きく差異がある場合、マスタの変更にIOスレッドが追いつけていない

遅延している場合どうしたら良いの?