4

如何通过查询不使用“显示从属状态”来查找 mysql DB 是从属?

4

3 回答 3

6

以下是您必须检测复制是否正在运行的 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='';)。

于 2011-08-27T17:36:00.970 回答
1

根据MySQL doc - Checking Replication Status

Slave_IO_Running:读取master二进制日志的I/O线程是否正在运行。通常,除非您尚未开始复制或已使用 STOP SLAVE 明确停止复制,否则您希望此选项为 Yes。

Slave_SQL_Running:用于执行中继日志中事件的 SQL 线程是否正在运行。与 I/O 线程一样,这通常应该是 Yes。

于 2011-03-31T10:49:10.520 回答
1

在 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;

于 2017-04-26T11:28:27.430 回答