概念描述
查看一个同步有问题的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线程停止时会出现的状态,出现的时间非常短。