概念描述

查看一个同步有问题的mysql从库时发现show slave status字段很多,自己也是一知半解,于是系统性的学习了一下每个字段的用处,并进行了整理。

知识总结

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event    #多种不同状态,目前状态表示已经成功连接到master,正等待二进制日志的到达。
                  Master_Host: 10.10.10.1                          #mysql主库的ip地址
                  Master_User: repl                                #master上面的一个用户,用来负责主从复制的用户。
                  Master_Port: 3309                                #master服务器的端口
                Connect_Retry: 60                                  #连接中断后,重新尝试连接的时间间隔。默认值是60秒。
              Master_Log_File: mysql-bin.000003                    #当前I/O线程正在读取的主服务器binlog日志文件的名称。
          Read_Master_Log_Pos: 2224                                #当前I/O线程正在读取的binlog日志的位置。
               Relay_Log_File: relay-log.000008                    #当前slave SQL线程正在读取并执行的中继日志的名称。
                Relay_Log_Pos: 566                                 #当前slave SQL线程正在读取并执行的中继日志的位置。
        Relay_Master_Log_File: mysql-bin.000003                    #SQL线程从中继日志中读取的正在执行的sql语句,对应主库的sql语句记录在主库的哪个binlog日志中。
             Slave_IO_Running: Yes                                 #I/O线程是否被启动并成功地连接到主服务器上。
            Slave_SQL_Running: Yes                                 #SQL线程是否被启动。
              Replicate_Do_DB:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
          Replicate_Ignore_DB:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
           Replicate_Do_Table:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
       Replicate_Ignore_Table:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
      Replicate_Wild_Do_Table:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
  Replicate_Wild_Ignore_Table:                                     #用来指明哪些库或表在复制的时候不要同步到从库。
                   Last_Errno: 0                                   #slave的SQL线程读取日志参数的的错误数量和错误消息,错误数量为0并且消息为空字符串表示没有错误。
                   Last_Error:                                     #如果Last_Error值不是空值,它也会在从属服务器的错误日志中作为消息显示。 
                 Skip_Counter: 0                                   #SQL_SLAVE_SKIP_COUNTER的值,用于设置跳过sql执行步数。
          Exec_Master_Log_Pos: 2224                                #slave SQL线程当前执行的事件,对应在master相应的二进制日志中的位置(Exec_Master_Log_Pos不可能超过Read_Master_Log_Pos)。
              Relay_Log_Space: 767                                 #所有原有的中继日志结合起来的总大小。
              Until_Condition: None                                #如果没有指定UNTIL子句,则没有值。
               Until_Log_File:                                     #用于指示日志文件名。
                Until_Log_Pos: 0                                   #用于指示日志文件名的位置值。
           Master_SSL_Allowed: No                                  #不允许对主服务器进行SSL连接,则值为No,反之为YES。允许SSL连接,但是从属服务器没有让SSL支持被启用,则值为Ignored。
           Master_SSL_CA_File:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
           Master_SSL_CA_Path:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
              Master_SSL_Cert:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
            Master_SSL_Cipher:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
               Master_SSL_Key:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
        Seconds_Behind_Master: 0                                   #主从复制延时,0表示主从同步无延时。
Master_SSL_Verify_Server_Cert: No                                  #被从属服务器使用加密相关的参数。用于连接主服务器。
                Last_IO_Errno: 0                                   #最后一次I/O线程的错误号。
                Last_IO_Error:                                     #最后一次I/O线程的错误消息。
               Last_SQL_Errno: 0                                   #最后一次SQL线程的错误号。
               Last_SQL_Error:                                     #最后一次SQL线程的错误消息。
  Replicate_Ignore_Server_Ids:                                     #主从复制,从库忽略的主库服务器Id号。就是不以这些服务器Id为主库。
             Master_Server_Id: 132135                                    #表示主库服务器id号。
                  Master_UUID: 5f0b7791-a499-11e6-901c-44a84227448b      #表示主库服务器的UUID号。
             Master_Info_File: mysql.slave_master_info                   #表示从库中保存主库服务器相关的目录位置。
                    SQL_Delay: 0                                         #一个非负整数,表示秒数,Slave滞后多少秒于master。
          SQL_Remaining_Delay: NULL                                      #Slave_SQL_Running_State等待,表示有多少秒左右的延迟,在其他时候,这个字段是NULL。
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates   #线程已经处理了中继日志文件中的所有事件,现在正等待I/O线程将新事件写入中继日志。
           Master_Retry_Count: 86400                               #连接主库失败最多的重试次数。   
                  Master_Bind:                                     #slave从库在多网络接口的情况下使用,以确定用哪一个slave网络接口连接到master。
      Last_IO_Error_Timestamp:                                     #最后一次I/O线程错误时的时间戳。
     Last_SQL_Error_Timestamp:                                     #最后一次SQL线程错误时的时间戳。
               Master_SSL_Crl:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
           Master_SSL_Crlpath:                                     #被从属服务器使用加密相关的参数。用于连接主服务器。
           Retrieved_Gtid_Set: 89gb7791-a499-11e6-901c-44a84227448b:2-11      #获取到的GTID<IO线程>               
            Executed_Gtid_Set: 89gb7791-a499-11e6-901c-44a84227448b:1-11   #执行过的GTID<SQL线程>
                Auto_Position: 1                                   #记录在GTID模式下是否开启了自动事务校验。
         Replicate_Rewrite_DB:                                     #同步的时候需要更改的db名称。
                 Channel_Name:                                     #复制通道的名称,可以有多个。
           Master_TLS_Version:                                     #确定MySQL服务器允许进行加密连接的TLS协议。

slave I/O线程的状态,有以下几种:

1) waiting for master update
这是connecting to master状态之前的状态

2) connecting to master
I/O线程正尝试连接到master

3) checking master version
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。

4) registering slave on master
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。 

5) requesting binlog dump
在与master建立连接后,会出现该状态。该状态出现的时间非常短暂。在这个状态下,I/O线程向master发送请求,请求binlog,位置从指定的binglog 名字和binglog的position位置开始。

6) waiting to reconnect after a failed binlog dump request
如果因为连接断开,导致binglog的请求失败,I/O线程会进入睡眠状态。然后定期尝试重连。尝试重连的时间间隔,可以使用命令"change master to master_connect_trt=X;"改变。

7) reconnecting after a failed binglog dump request
I/O进程正在尝试连接master

8) waiting for master to send event
说明,已经成功连接到master,正等待二进制日志时间的到达。如果master 空闲,这个状态会持续很长时间。如果等待的时间超过了slave_net_timeout(单位是秒)的值,会出现连接超时。在这种状态下,I/O线程会人为连接失败,并开始尝试重连

9) queueing master event to the relay log
此时,I/O线程已经读取了一个event,并复制到了relay log 中。这样SQL 线程可以执行此event

10) waiting to reconnect after a failed master event read
读取时出现的错误(因为连接断开)。在尝试重连之前,I/O线程进入sleep状态,sleep的时间是master_connect_try的值(默认是60秒)

11) reconnecting after a failed master event read
I/O线程正尝试重连master。如果连接建立,状态会变成"waiting for master to send event"

12) waiting for the slave sql thread to free enough relay log space
这是因为设置了relay_log_space_limit,并且relay log的大小已经整张到了最大值。I/O线程正在等待SQL线程通过删除一些relay log,来释放relay log的空间。

13) waiting for slave mutex on exit
I/O线程停止时会出现的状态,出现的时间非常短。