17.1.5.1 レプリケーションステータスの確認

レプリケーションプロセスを管理するときにもっとも一般的なタスクは、レプリケーションが実行中であること、およびスレーブとマスターとの間でエラーがないことを確認することです。このための主要なステートメントは SHOW SLAVE STATUS で、各スレーブで実行する必要があります。

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master1
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 931
               Relay_Log_File: slave1-relay-bin.000056
                Relay_Log_Pos: 950
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 931
              Relay_Log_Space: 1365
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids: 0

ステータスレポートの中で調査すべき主要フィールドは、次のとおりです。

  • Slave_IO_State: スレーブの現在のステータス。詳しくは、セクション8.12.5.6「レプリケーションスレーブの I/O スレッド状態」およびセクション8.12.5.7「レプリケーションスレーブ SQL スレッドの状態」を参照してください。

  • Slave_IO_Running: マスターのバイナリログを読み取るための I/O スレッドが実行中かどうか。レプリケーションをまだ起動していないか STOP SLAVE で明示的に停止した場合を除き、通常はこれを Yes にすることをお勧めします。

  • Slave_SQL_Running: リレーログでイベントを実行するための SQL スレッドが実行中かどうか。I/O スレッドと同様、これは通常は Yes にすることをお勧めします。

  • Last_IO_ErrorLast_SQL_Error: リレーログを処理するときに I/O および SQL スレッドによって登録された最後のエラー。理想的には、これらはエラーがないことを示すブランクであるべきです。

  • Seconds_Behind_Master: スレーブ SQL スレッドがマスターバイナリログの処理より何秒遅れているか。高い (または増加する) 数値は、スレーブがマスターからのイベントを適時に処理できないことを示している可能性があります。

    Seconds_Behind_Master が値 0 の場合は通常、スレーブがマスターに追い付いたことを意味すると解釈できますが、これが厳密には正しくない場合がいくつかあります。たとえば、マスターとスレーブの間のネットワーク接続が切断されたけれども、スレーブ I/O スレッドがまだこれを通知されていない場合、つまり slave_net_timeout がまだ経過していない場合に、これが発生する可能性があります。

    Seconds_Behind_Master の過渡値が状況を正確に反映しない場合もあります。スレーブ SQL スレッドが I/O に追い付くと、Seconds_Behind_Master は 0 を表示しますが、スレーブ I/O スレッドがまだ新しいイベントをキューに入れているときは、Seconds_Behind_Master は SQL スレッドが新しいイベントの実行を終了するまで大きな値を示す場合があります。これは特に、イベントのタイムスタンプが古い場合に発生する可能性があります。そのような場合、比較的短い期間に数回 SHOW SLAVE STATUS 実行すると、この値が 0 と比較的大きな値との間を前後に繰り返し変化するのが見える可能性があります。

フィールドのいくつかのペアは、スレーブがマスターバイナリログからイベントを読み取り、リレーログでそれらを処理するときの進捗状況に関する情報を提供します。

  • (Master_Log_fileRead_Master_Log_Pos): スレーブ I/O スレッドがマスターバイナリログからどのくらい離れてイベントを読み取ったかを示す、ログ内の座標。

  • (Relay_Master_Log_FileExec_Master_Log_Pos): スレーブ SQL スレッドがマスターバイナリログから受け取ったイベントをどのくらい離れて実行したかを示す、ログ内の座標。

  • (Relay_Log_FileRelay_Log_Pos): スレーブ SQL スレッドがスレーブリレーログをどのくらい離れて実行したかを示す、リレーログ内の座標。これらは前述の座標に対応しますが、マスターバイナリログ座標ではなく、スレーブリレーログ座標で表現されます。

マスターでは、接続されたスレーブのステータスを SHOW PROCESSLIST を使用して確認することで、実行中プロセスのリストを確認できます。スレーブ接続では、Command フィールドに Binlog Dump があります。

mysql> SHOW PROCESSLIST \G;
*************************** 4. row ***************************
     Id: 10
   User: root
   Host: slave1:58371
     db: NULL
Command: Binlog Dump
   Time: 777
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL

レプリケーションプロセスを実行するのはスレーブであるため、このレポートで入手できる情報はほとんどありません。

--report-host オプションで起動されて、マスターに接続されているスレーブの場合は、マスターでの SHOW SLAVE HOSTS ステートメントはスレーブに関する基本情報を示します。出力には、スレーブサーバーの ID、--report-host オプションの値、接続中のポート、マスター ID が含まれます。

mysql> SHOW SLAVE HOSTS;
+-----------+--------+------+-------------------+-----------+
| Server_id | Host   | Port | Rpl_recovery_rank | Master_id |
+-----------+--------+------+-------------------+-----------+
|        10 | slave1 | 3306 |                 0 |         1 |
+-----------+--------+------+-------------------+-----------+
1 row in set (0.00 sec)

User Comments
Sign Up Login You must be logged in to post a comment.