web-dev-qa-db-ja.com

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

マスター/スレーブレプリケーションのセットアップを行っていますが、正常に動作しているようです。以下は、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_PosRelay_Master_Log_Fileについて詳しく知りたい。

私の質問は:

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

  • では、relay_master_log_fileについてはどうでしょうか。 Master_Log_Fileとどう違うのですか?

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

  • これらのファイルがバイナリ形式であるため、表示できないのは本当ですか?

11
newbie14

さらに理解したいのは、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
8
RolandoMySQLDBA

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

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

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

8
drogart