我们可以在 MySQL 的 SHOW SLAVE STATUS 中只捕获 Slave_IO_Running

Pha*_*dra 9 mysql replication

我只想捕获 Slave_IO_Running 和 Slave_SQL_Running 列值的状态/结果,我将使用它们集成到我们的应用程序中。

有没有办法只获取这些字段的值,而不是获取 SHOW SLAVE STATUS 的所有字段的值。

我的操作系统是windows。

我正在使用 MySQL 5.0.24

Der*_*ney 8

执行

mysql> SHOW STATUS LIKE 'Slave_running';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slave_running | ON    |
+---------------+-------+
1 row in set (0.04 sec)
Run Code Online (Sandbox Code Playgroud)

手册

如果此服务器是连接到复制主服务器的复制从属服务器,并且 I/O 和 SQL 线程都在运行,则此项为 ON;否则,它是关闭的。

警告:如果您在 5.1.46 或 5.5.4 版本之前运行 MySQL,则从属 IO 线程可能无法运行,并且状态变量指示从属正在运行。( MySQL 错误 51089 )


从 MySQL 5.7 开始,上述解决方案默认不起作用。这是因为许多状态变量 frominformation_schema正在被移入performance_schema

从 MySQL 5.7.6 开始,Performance Schema 还包含系统和状态变量表(参见第 23.9.13 节,“性能模式系统变量表”和第 23.9.14 节,“性能模式状态变量表”)。Performance Schema 表旨在替换 INFORMATION_SCHEMA 表,该表从 MySQL 5.7.6 开始已弃用,并将在未来的 MySQL 版本中删除。 [源代码]

这些 Slave_xxx 状态变量通过 SHOW STATUS 变得不可用:

  • Slave_heartbeat_period
  • Slave_last_heartbeat
  • Slave_received_heartbeats
  • Slave_retry_transactions
  • Slave_running

应修改使用这些状态变量的应用程序,以使用与复制相关的性能模式表获取此信息。

有两个选项可以获取slave_running外部状态SHOW SLAVE STATUS

  1. 如文档所述,首选方法是更新应用程序以从replication-connection-status.SERVICE_STATEreplication-applier-status.SERVICE_STATE中提取performance_schema

// 这是 SLAVE IO THREAD 状态
SELECT SERVICE_STATE FROM performance_schema.replication_connection_status;

// 这是 SLAVE SQL THREAD 状态
SELECT SERVICE_STATE FROM performance_schema.replication_applier_status;

注意:这是用于单主复制。多主复制应该在replication_applier_coordinator.SERVICE_STATE

  1. 第二个选项是开启show_compatibility_56。这是一个临时修复,可以让您无需修改​​应用程序,但将在未来版本中消失。