如何找到mysql DB是奴隶?

时间:2011-03-31 10:42:59

标签: mysql replication database-replication

如何找到mysql DB是奴隶而不是通过查询使用“show slave status”?

3 个答案:

答案 0 :(得分: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个DB Conction。

选项#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 :(得分:1)

根据MySQL doc - Checking Replication Status

  

Slave_IO_Running :是否为I / O.   用于读取主二进制文件的线程   日志正在运行。通常,你想要   这是肯定的,除非你还没有   开始复制或明确   用STOP SLAVE停止了它。

     

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

答案 2 :(得分:1)

在MySQL 5.7之前,你可以通过执行以下查询来检查'slave_running'变量:SHOW GLOBAL STATUS LIKE'live_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;