如何通过查询而无需使用"show slave status"来查找mysql数据库是否是从服务器?
以下是检测复制是否正在运行的三个选项:
选项1:检查状态变量“Slave_running”
适用于MySQL 5.1/5.5
select variable_value from information_schema.global_status
where variable_name = 'Slave_running';
使用 MySQL 5.0 及其以前版本
SHOW VARIABLES LIKE 'Slave_running';
选项#2:检查进程列表
使用MySQL 5.1+/5.5
select COUNT(1) SlaveThreads
from information_schema.processlist
where user = 'system user';
适用于MySQL 5.0及以下版本。
SHOW PROCESSLIST;
STOP SLAVE;
),或已禁用(通过运行CHANGE MASTER TO MASTER_HOST='';
)。在 MySQL 5.7 之前,您可以通过执行以下查询来检查“slave_running”变量:
SHOW GLOBAL STATUS LIKE 'slave_running';
自 MySQL 5.7 以后,已删除“slave_running”,上述查询将返回一个空集。
您可以启用“show_compatibility_56”来获取值,但“show_compatibility_56”已被弃用并将很快被删除。原因是 MySQL 正在摆脱 information_schema GLOBAL_STATUS 和 SESSION_STATUS 表,而更喜欢 performance_schema。
在 MySQL 5.7 中,除了 SHOW SLAVE STATUS 外,获取 slave 运行状态的正确方法是使用新的基于复制的 performance_schema 表。
您可以执行以下查询来获取复制服务的状态:
SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;
Slave_IO_Running:用于读取主二进制日志的I/O线程是否正在运行。通常情况下,除非您尚未开始复制或已使用STOP SLAVE显式停止它,否则应该是Yes。
Slave_SQL_Running:用于在中继日志中执行事件的SQL线程是否正在运行。与I/O线程一样,这通常应该是Yes。