タイトル: レプリケーションのステータス確認方法
SEOタイトル: MySQL/MariaDB レプリケーション状態確認(SHOW MASTER/SLAVE STATUS / 遅延チェック / 障害対応)
| この記事の要点 |
- マスター側:
SHOW MASTER STATUS; でバイナリログのファイル名と Position を確認 - スレーブ側:
SHOW SLAVE STATUS\G で Slave_IO_Running / Slave_SQL_Running が Yes なら正常 - 遅延確認:
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_Running | Yes | マスターから binlog を受信中 |
| Slave_SQL_Running | Yes | 受信した binlog を適用中 |
| Seconds_Behind_Master | 0 | マスターからの遅延秒数 |
| Last_IO_Error | 空 | IO スレッドのエラー |
| Last_SQL_Error | 空 | SQL スレッドのエラー |
| Master_Log_File / Read_Master_Log_Pos | マスター側 File/Position に追従 | IO スレッドの読込位置 |
| Relay_Master_Log_File / Exec_Master_Log_Pos | Read_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範囲
両者が一致していれば追いついている状態。差分があれば未適用のトランザクションが残っています。