语法
SHOW SLAVE STATUS [FOR CHANNEL channel]
这个语句提供从线程的基本参数的状态信息。它要求有SUPER或者REPLICATION CLIENT权限。
示例
如果你用mysql客户端发出这个语句,你可以用\G而不是分号来结束语句,这样得到的结果可读性更好。
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: repl
Master_Port: 13000
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 1307
Relay_Log_File: slave-relay-bin.000003
Relay_Log_Pos: 1508
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
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: 1307
Relay_Log_Space: 1858
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:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562
Master_Info_File: /var/mysqld.2/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Reading event from the relay log
Master_Retry_Count: 10
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_name:
Master_TLS_Version: TLSv1.2
Performance Schema提供可以获取复制信息的表。这与SHOW SLAVE STATUS语句的可用信息相似,但是用表的形式。更多信息,参考Performance Schema Replication Tables。
下面的列表描述SHOW SLAVE STATUS返回的字段。额外的信息,参考16章的Checking Replication Status。
Slave_IO_State
它时SHOW PROCESSLIST输出的从I/O线程的State字段的副本。这告诉你线程正在做什么:尝试去连主服务器,等待来自主服务器的事件,重新连接主服务器,等等。完整的可以查看Replication Slave I/O Thread States。
Master_Host
这个从服务器连接的主服务器。
Master_User
连接到主服务器使用的账号用户名。
Master_Port
连接到主服务器时使用的端口。
Connect_Retry
在尝试的连接之间秒数(默认60秒)。这可以用CHANGE MASTER TO语句设置。
Master_Log_File
I/O线程当前正在读的主服务器的bin日志文件名称。
Read_Master_Log_Pos
当前主二进制日志文件中I/O线程读取到的位置。
Relay_Log_File
SQL线程当前正在从中读取和执行的中继日志文件的名称。
Relay_Log_Pos
当前中继日志文件中SQL线程已读取并执行到的位置。
Relay_Master_Log_File
含由SQL线程执行的最新事件的主二进制日志文件的名称。
Slave_IO_Running
I/O线程是否已经启动并且已经成功的连接到主服务器。在内部,这个线程的状态表示下面三个值之一:
MYSQL_SLAVE_NOT_RUN。从I/O线程没有运行。对于这个状态,Slave_IO_Running是No。
MYSQL_SLAVE_RUN_NOT_CONNECT。从I/O线程正在运行,但是没有连接到复制的主服务器。对于这个状态,Slave_IO_Running是Connecting。
MYSQL_SLAVE_RUN_CONNECT。从I/O线程正在运行,并且连接到了复制的主服务器。对于这个状态,SLAVE_IO_Running是Yes。
Slave_running系统状态变量的值对应这个值。
Slave_SQL_Running
SQL线程是否是已经启动。
Replicate_Do_DB, Replicate_Ignore_DB
使用了--replicate-do-db和--repliate-ignore-db选项配置了数据库。
Replicate_Do_Table, Replicate_Ignore_Table, Replicate_Wild_Do_Table,
Replicate_Wild_Ignore_Table
Last_Errno, Last_Error
这几列是Last_SQL_Errno和Last_SQL_Error的别名。可以使用RESET MASTER或者RESET SLAVE重置这些列的值。
说明: 当从SQL线程接收到一个错误,它会先报告错误,接着停止SQL线程(产生了延迟)。这就是说即使Slave_SQL_Running显示Yes,Last_SQL_Errno仍然有可能短暂的显示非0的值。
Skip_Counter
系统变量sql_salve_skip_counter当前的值。参考SET GLOBAL sql_slave_kip_counter Statement。
Exec_Master_Log_Pos
这个位置是SQL线程已经读取和执行的当前主服务器bin日志文件的位置,标记下个事务或者要处理的事件的开始。你可以用CHANGE MASTER TO语句的MASTER_LOG_POS选项使用这个值,当从一个已经存在的从服务器上启动一个新的从服务器时,以便新的从服务器从这个点开始读。
Relay_Log_Space
所有存在的中继日志文件的总共大小。
Until_Condition, Until_Log_File, Until_Log_Pos
Master_SSL_Allowed, Master_SSL_CA_File, Master_SSL_CA_Path, Master_SSL_Cert,
Master_SSL_Cipher, Master_SSL_CRL_File, Master_SSL_CRL_Path, Master_SSL_Key,
Master_SSL_Verify_Server_Cert
Seconds_Behind_Master
这个字段表示从服务器的延迟程度:
当slave正在处理更新,对于当前在从服务器上正在处理的事件,这个字段显示的是从服务器上当前时间戳和在主服务器上记录的原始时间戳的差异。
当没有事件在从服务器上处理时
本质上,这个字段是测量的从SQL线程和从I/O线程之间的时间差异秒数。如果在从服务器和主服务器之间的网络连接比较快,那么从I/O线程是非常接近主服务器的,所以这个字段是与主服务器相比,从SQL线程延迟程度的近似值。如果网络慢,这就不是一个好的近似值;从SQL线程经常可能被较慢的从I/O线程赶上,所以Seconds_Behind_Master经常显示0,即使I/O线程比主服务器慢。换句话,这个列只在较快的网络中有用。
即使主从时钟不相同,这种时差计算仍然有效时间,前提是从I/O线程启动时计算的差保持不变
从那时起。任何改变——包括NTP更新——都可能导致时钟偏移,以至于让Seconds_Behind_Master的计算不可靠。
在MySQL5.7中,如果从SQL线程没有运行,或者SQL线程已经消费了所有的中继日志并且从I/O线程没有运行,这个字段就是NULL。如果I/O线程正在运行,但是中继日志已经用完,Seconds_Behind_Master被设置成0.
Seconds_Behind_Master的值是基于存储在事件中的时间戳的,通过复制保存。
当有一个多线程从服务器时,你应该记住这个值时基于Exec_Master_log_Pos,并且这样可能不会反应最近提交的事务的位置。
Last_IO_Errno, Last_IO_Error
让I/O线程停止的最近的错误的错误号和错误信息。一个0的错误号和空的错误信息,表示"no error"。如果Last_IO_Error值不是空,这个错误值也会出现在从服务器的错误日志中。
I/O错误信息包括一个时间戳(表示最近的I/O线程错误发生在什么时候)。这个时间戳使用YYMMDD hh:mm:ss的格式,并且出现在Last_IO_Error_Timestamp列中。
使用RESET MASTER或者RESET SLAVE重置这些列中显示的值。
Last_SQL_Errno, Last_SQL_Error
让线程停止的最近错误的错误号和错误信息。0的错误号和空的错误信息表示没有错误。如果Last_SQL_Error值不是空的,错误值也出现在从服务器的错误日志中。
Replicate_Ignore_Server_Ids
Master_Server_Id
主服务器的server_id
Master_UUID
主服务器的server_uuid
Master_Info_File
master.info文件的位置
SQL_Delay
从服务器必须滞后主服务器的秒数
SQL_Remaining_Delay
Slave_SQL_Running_State
SQL线程的状态(类似于Slave_IO_State)。这个值与SHOW PROCESSLIST展示的SQL 线程的状态值一样。
Master_Retry_Count
在失去连接的情况下,从服务器可以尝试重新连接到主服务器的次数。
Master_Bind
Last_IO_Error_Timestamp
最近的I/O错误发生时的时间戳。
Last_SQL_Error_Timestamp
最近的SQL错误发生的时间戳。
Retrieved_Gtid_Set
Executed_Gtid_Set
Auto_Position
Replicate_Rewrite_DB
Channel_name
Master_TLS_Version