试图了解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_PosRelay_Master_Log_File

我的问题是:

  • 中继日志文件是否是正在本地读取并存储以运行复制的文件,这是真的吗?

  • 怎么样relay_master_log_file即可; 有什么区别Master_Log_File呢?

  • 什么是这两个值,Read_Master_Log_PosRelay_Log_Pos?为什么即使复制已完成并同步,它们仍显示?

  • 这些文件是二进制格式,因此我无法查看它们吗?

Answers:


8

我想进一步理解Relay_Log_File,Relay_Log_Pos和Relay_Master_Log_File。

从中SHOW SLAVE STATUS\G获取两个值

  • Relay_Log_File :当前中继日志在复制过程中接受新条目
  • Relay_Log_Pos :当前中继日志的当前位置在复制期间接受新条目
  • Relay_Master_Log_File :中继日志文件,其中包含在从服务器上执行的主服务器上最后成功执行的SQL语句。
  • Master_Log_File:与当前中继日志文件和当前中继日志位置相对应的Master上的日志

这些文件为二进制文件,因此无法正确查看它们

是的,您可以查看中继日志。由于它们具有与常规二进制日志相同的结构,因此只需运行mysqlbinlog程序。例如,要在您的任何中继日志(例如最后一个日志)中查看SQL,请执行以下操作:

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

现在,我更加清楚Exec_Master_Log_Pos(这是正在执行的主日志位置),以及until_log_pos停在哪里?
newbie14 2012年

小错误在这里。Relay_Master_Log_File主二进制日志文件的名称,该文件包含SQL线程执行的最新事件,而不是中继日志文件
crishoj


8

Relay_Master_Log_File实际上是主服务器上binlog的名称,其中包含在从服务器上成功执行的最后一条SQL语句。它不是从站上中继日志的名称。参见:http : //dev.mysql.com/doc/refman/5.5/en/show-slave-status.html

Exec_Master_Log_Pos是从属SQL线程一直执行到的relay_master_log_file中的位置。因此,在您的示例中,从数据库已执行所有语句,直到mysql-bin.000001主数据库上的binlog pos 10726644。

until_log_pos实际上仅在使用语法启动从属服务器时使用START SLAVE UNTIL master_log_pos = $integer。该语法将复制到该位置(它将是exec_master_log_pos),然后停止。通常,仅当您要复制到特定点时才这样做,而无需进一步复制(例如,如果下一条语句是意外的表删除或类似的操作)。如果until_log_pos未指定,则值为0,因此在您的情况下,意味着复制将继续向前。


谢谢,我现在变得更加清晰。现在还有什么要监视的吗?
newbie14 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.