如何通过查询不使用“显示从属状态”来查找 mysql DB 是从属?
3 回答
以下是您必须检测复制是否正在运行的 3 个选项
选项#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';
- 如果 SlaveThreads = 2,复制正在运行
- 如果 SlaveThreads = 1,复制被破坏
- 如果 SlaveThreads = 0,则停止或禁用复制
使用 MySQL 5.0 并返回
SHOW PROCESSLIST;
在用户列中查找它们具有“系统用户”的 2 个数据库连接。
选项#3:检查是否存在 master.info
如果在数据库服务器上设置了复制,请查找 master.info。默认情况下,master.info 通常位于 /var/lib/mysql 或定义 datadir 的任何位置。
只需多次运行“cat master.info”(对于 Windows 社区,键入 master.info)。如果日志位置正在移动,则复制处于打开状态。如果日志位置没有移动,则可能意味着复制被破坏(SQL 线程中的 SQL 错误)、停止(由于STOP SLAVE;
)或禁用(通过运行CHANGE MASTER TO MASTER_HOST='';
)。
根据MySQL doc - Checking Replication Status:
Slave_IO_Running:读取master二进制日志的I/O线程是否正在运行。通常,除非您尚未开始复制或已使用 STOP SLAVE 明确停止复制,否则您希望此选项为 Yes。
Slave_SQL_Running:用于执行中继日志中事件的 SQL 线程是否正在运行。与 I/O 线程一样,这通常应该是 Yes。
在 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。
在 SHOW SLAVE STATUS 之外获取在 MySQL 5.7 中运行的从属设备状态的正确方法是使用新的基于复制的 performance_schema 表。
您可以执行以下查询来获取复制服务的状态: SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;