如何确定mysql数据库是从属数据库?

5
如何通过查询而无需使用"show slave status"来查找mysql数据库是否是从服务器?
3个回答

7

以下是检测复制是否正在运行的三个选项:

选项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;

寻找两个在用户列中有“系统用户”的数据库连接。
选项#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='';)。

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。

在 MySQL 5.7 中,除了 SHOW SLAVE STATUS 外,获取 slave 运行状态的正确方法是使用新的基于复制的 performance_schema 表。

您可以执行以下查询来获取复制服务的状态:
SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;


1
根据MySQL文档-检查复制状态

Slave_IO_Running:用于读取主二进制日志的I/O线程是否正在运行。通常情况下,除非您尚未开始复制或已使用STOP SLAVE显式停止它,否则应该是Yes。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接