20.

MySQL/MariaDB レプリケーション状態確認(SHOW MASTER/SLAVE STATUS / 遅延チェック / 障害対応)

編集
この記事の要点
  • マスター側: SHOW MASTER STATUS; でバイナリログのファイル名と Position を確認
  • スレーブ側: SHOW SLAVE STATUS\GSlave_IO_Running / Slave_SQL_RunningYes なら正常
  • 遅延確認: Seconds_Behind_Master がスレーブの遅れ秒数。0 または NULL 以外なら遅延中
  • MySQL 8.0+ / MariaDB 10.5+ では SHOW REPLICA STATUS / SHOW BINARY LOG STATUS に名称変更
  • エラー時は Last_IO_Error / Last_SQL_Error を確認。GTID 利用なら Retrieved_Gtid_Set / Executed_Gtid_Set も対照

マスター側のステータス確認

マスター DB で以下を実行します。

SHOW MASTER STATUS;

-- MySQL 8.0.22+ / MariaDB 10.5+ では別名も利用可
SHOW BINARY LOG STATUS;

出力例

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000123 | 51234567 |              |                  | uuid:1-1000       |
+------------------+----------+--------------+------------------+-------------------+
項目意味
File現在書き込み中のバイナリログファイル名
Positionそのファイル内の現在の書き込み位置(バイト)
Executed_Gtid_Setマスターで実行済みの GTID 範囲

スレーブ側のステータス確認

-- 横方向だと見づらいので \G を付けて縦に展開
SHOW SLAVE STATUS\G

-- MySQL 8.0.22+ / MariaDB 10.5+
SHOW REPLICA STATUS\G

正常時の主要項目

項目期待値意味
Slave_IO_RunningYesマスターから binlog を受信中
Slave_SQL_RunningYes受信した binlog を適用中
Seconds_Behind_Master0マスターからの遅延秒数
Last_IO_ErrorIO スレッドのエラー
Last_SQL_ErrorSQL スレッドのエラー
Master_Log_File / Read_Master_Log_Posマスター側 File/Position に追従IO スレッドの読込位置
Relay_Master_Log_File / Exec_Master_Log_PosRead_Master_Log_Pos に追従SQL スレッドの適用位置

レプリケーション遅延の確認

Seconds_Behind_Master が遅延の目安ですが、ネットワーク断時は NULL になります。実運用では pt-heartbeat (Percona Toolkit) のような外部ツールでの計測が正確です。

# 簡易: 1 秒ごとに遅延を出力
watch -n 1 'mysql -e "SHOW SLAVE STATUS\G" | grep Seconds_Behind_Master'

レプリケーション停止/再開

-- 停止
STOP SLAVE;
STOP REPLICA;       -- MySQL 8.0.22+

-- 再開
START SLAVE;
START REPLICA;

-- IO スレッドだけ / SQL スレッドだけ
STOP SLAVE IO_THREAD;
STOP SLAVE SQL_THREAD;

レプリケーション障害の典型と対処

症状原因対処
Slave_IO_Running=No, Last_IO_Error: Got fatal error 1236マスター側 binlog purge / position 不整合正しい binlog / position に CHANGE MASTER TO
Slave_SQL_Running=No, Last_SQL_Errno: 1062 (Duplicate entry)スレーブ側に重複行該当行削除 → START SLAVE 、または sql_slave_skip_counter=1
Slave_SQL_Running=No, Last_SQL_Errno: 1032 (record not found)スレーブ側に行が存在しない欠落データを補填、または skip
Seconds_Behind_Master が増え続けるSQL スレッドの適用が追いつかない並列レプリケーション(slave_parallel_workers)有効化

GTID 利用時の確認

-- マスターで実行済み GTID
SELECT @@global.gtid_executed;

-- スレーブで受信済み / 実行済み
SHOW SLAVE STATUS\G
-- Retrieved_Gtid_Set: 受信したGTID範囲
-- Executed_Gtid_Set:  適用済みGTID範囲

両者が一致していれば追いついている状態。差分があれば未適用のトランザクションが残っています。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ダウンロード&インストール方法(Windows)
  2. インストール方法(Linux)
  3. コマンド一覧
  4. SQL
  5. データ型
  6. 関数
  7. 管理ツール
  8. 設定
  9. パフォーマンスチューニング関連
  10. エクスポートおよびインポート
  11. エラー&トラブル
  12. 文字コードの確認
  13. 実行中の SQL の状態確認およびプロセスキルの方法
  14. パスワードの無効化設定
  15. root ユーザーの初期パスワード確認方法
  16. rootユーザーのパスワード変更方法
  17. LIMIT, OFFSET の始まりと挙動
  18. mysqlのバージョン確認方法
  19. MySQLで実行計画を表示する方法
  20. レプリケーションのステータス確認方法
  21. 中央値の導き方(バージョン8未満)
  22. 階層SQL(バージョン8未満)
  23. パーセンタイルの導き方
  24. 特定スキーマの全テーブルの全カラム情報を取得する方法

最近更新/作成されたページ