地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【MySQL】レプリカラグを検出したらやること

MySQLのレプリカはいかにもあるようにソースサーバに1スレッド(Binary log dump thread)、レプリカサーバに2スレッド(Replication I/O thread、Replication SQL thread)あります。(ソース/レプリカって呼び方は最近変わったのだろうか、あまり見慣れない気がする?)

dev.mysql.com

SHOW SLAVE STATUSとかを実行することで以下のような出力が得られます。遅延自体は基本的にSeconds_Behind_Masterで判断できます。

Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 198822658
Relay_Log_File: relay-bin.000001
Relay_Log_Pos: 198730937
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

それぞれを見ていく

Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 198822658

上記はレプリカ側でI/O threadにより転送されたリレーログに関する記述で転送されて受け取っているファイルとそのポジションが記載されています。

Relay_Master_Log_File: mysql-bin.000001
Exec_Master_Log_Pos: 198730774

上記はSQLスレッドがどこまでログ内のSQLを実行したかを示していてファイルとポジションが記載されています。

この状態でソース側でSHOW MASTER STATUSを実行すると以下のような出力が得られます

File: mysql-bin.000001
Position: 198937070

Seconds_Behind_Masterの値が大きくなっている

ソースサーバのPositionとレプリカサーバのRead_Master_Log_Posが違う、またはポジションが遅れている