MySQLのSHOW SLAVE STATUSを理解しようとしています


11

マスタースレーブレプリケーションのセットアップを行っていますが、正常に動作しているようです。以下はSHOW SLAVE STATUSコマンドの結果です:

show slave STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: *.*.*.*
                  Master_User: repliV1
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 10726644
               Relay_Log_File: mysqld-relay-bin.000056
                Relay_Log_Pos: 231871
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data1
          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: 10726644
              Relay_Log_Space: 232172
              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:

Relay_Log_FileRelay_Log_Posおよびについてさらに理解したいと思いRelay_Master_Log_Fileます。

私の質問は:

  • リレーログファイルは、レプリケーションを実行するためにローカルで読み込まれ、保存されているファイルですか?

  • その時はどうですかrelay_master_log_file。それはどう違うのMaster_Log_Fileですか?

  • これらの値の両方は何ですか、すなわち。Read_Master_Log_PosおよびRelay_Log_Pos?レプリケーションが完了して同期しているのに、なぜ表示されるのですか?

  • これらのファイルはバイナリ形式であるため、表示できませんか?

回答:


8

さらに理解したいのは、Relay_Log_File、Relay_Log_Pos、Relay_Master_Log_Fileです。

からSHOW SLAVE STATUS\G、2つの値を取得

  • Relay_Log_File :レプリケーション中に新しいエントリを受け入れる現在のリレーログ
  • Relay_Log_Pos :レプリケーション中に新しいエントリを受け入れる現在のリレーログの現在の位置
  • Relay_Master_Log_File :スレーブで実行されたマスターで最後に正常に実行されたSQLステートメントを含むリレーログファイル。
  • Master_Log_File:現在のリレーログファイルと現在のリレーログ位置に対応するマスター上のログ

ファイルはバイナリなので、正しく表示できません

はい、リレーログを表示できます。それらは通常のバイナリログと同じ構造を持っているので、mysqlbinlogプログラムを実行するだけです。たとえば、最後のログなど、リレーログ内のSQLを表示するには、次のようにします。

mysqlbinlog mysqld-relay-bin.000056 > /root/SQLForCurrentRelayLog.txt
less /root/SQLForCurrentRelayLog.txt

Exec_Master_Log_Pos(これは実行中のマスターログの位置ですか)はどうすればよくなり、until_log_posは停止する場所ですか?
初心者14

ここでの小さな間違い。リレーログファイルではなく、SQLスレッドによって実行された最新のイベントを含むマスターバイナリログファイルRelay_Master_Log_Fileの名前です
crishoj 2016


8

Relay_Master_Log_File実際には、スレーブで正常に実行された最後のSQLステートメントを含むマスター上のbinlogの名前です。スレーブのリレーログの名前ではありません。参照:http : //dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_PosスレーブSQLスレッドが実行されたrelay_master_log_file内の位置です。したがって、あなたの例では、スレーブdbはmysql-bin.000001、マスターdbでbinlog pos 10726644 までのすべてのステートメントを実行しました。

until_log_pos実際には、構文でスレーブを開始する場合にのみ使用されますSTART SLAVE UNTIL master_log_pos = $integer。その構文は、その位置まで(それがになりますexec_master_log_pos)複製され、停止します。これは通常、特定のポイントに複製したい場合にのみ行いますが、それ以上は行いません(次のステートメントが偶発的なテーブルのドロップなどである場合)。の値がuntil_log_pos指定されていない場合は0であるため、この場合、レプリケーションはそのまま続行されます。


ありがとうございました。他に監視するものはありますか?
newbie14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.