监控 MySQL 奴隶状态
monitoring MySQL slave status
我使用带有 mysql_check_health pugin 的 Nagios 来监控我的 MySQL 数据库。我需要能够从 sql 查询中 return 一个数值到我的插件,以告诉我复制的数据库是否已启动并且 运行。
所以这就是我所拥有的...
SHOW GLOBAL STATUS like 'slave_running'
将return:
Variable_name Value
Slave_running OFF/ON
我需要从一个简单的插件查询中返回一个数值,任何人都有任何想法......我的想法是 return 3-LENGTH(Slave_running)
这将 == 1 for ON 0 表示关闭,但以这种方式使用 return 值时遇到问题。
全局状态变量可以在 information_schema.GLOBAL_STATUS
table 中访问,您可以从中查询值。这使得根据 ON/OFF
状态有条件地将其转换为 0 或 1 变得容易。
例如:
> SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running';
+----------------+
| VARIABLE_VALUE |
+----------------+
| ON |
+----------------+
所以要将其转换为零或一,有几种可能性。 MySQL 会将布尔值视为 0 或 1,因此您可以直接比较它 = 'ON'
将上面的内容包装在子查询中(因为它 returns 一个值)并与 'ON'
:
进行比较
> SELECT (
'ON' = (SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running')
) AS state;
+-------+
| state |
+-------+
| 1 |
+-------+
或格式为 CASE
:
的类似表达式
> SELECT CASE WHEN (
SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running') = 'ON' THEN 1
ELSE 0 END AS state;
+-------+
| state |
+-------+
| 1 |
+-------+
在上面两个中,我将结果别名为 'state'
,但您可以使用任何列别名来读取输出,相应地替换 AS state
。
那里已经有什么了?
我忍不住想知道是否已经有为此目的构建的 Nagios 插件,并且 found this as a possibility。
我会强烈考虑使用:
SHOW SLAVE STATUS
作为您的信息查询。这为您提供了更多要监控的关键字段。
据此,您可能会考虑对以下字段发出警报:
Slave_IO_Running: Yes / No (tells you if binary log feed from master is working)
Slave_SQL_Running: Yes / No (tells you if slave's SQL execution thread is runing)
Seconds_Behind_Master: INT value (you should set appropriate low value here to alarm off of)
Slave_running
全局状态可以确定整体状态(当 IO 线程和 SQL slave 上的线程都为 运行 时,该值仅为 'On'),但在更精细的监控方面可能无法满足您的需求。例如,IO 线程中的中断可能被认为是比 SQL 线程中断更严重的事件(并且可能具有完全不同的恢复方案)。 Seconds_Behind_Master
也可能是监控的关键,因为您可能同时拥有 IO 和 SQL 线程 运行,但没有意识到从属由于某种原因无法跟上。
如果您需要将从属状态值的结果转换为 INT 值结果,您可以这样做:
SELECT
(CASE WHEN a.Slave_IO_Running = 'Yes' THEN 1 ELSE 0 END)
AS Slave_IO_Running,
(CASE WHEN a.Slave_SQL_Running = 'Yes' THEN 1 ELSE 0 END)
AS Slave_SQL_Running,
a.Seconds_Behind_Master AS Seconds_Behind_Master
FROM (SHOW SLAVE STATUS) AS a
我使用带有 mysql_check_health pugin 的 Nagios 来监控我的 MySQL 数据库。我需要能够从 sql 查询中 return 一个数值到我的插件,以告诉我复制的数据库是否已启动并且 运行。 所以这就是我所拥有的...
SHOW GLOBAL STATUS like 'slave_running'
将return:
Variable_name Value
Slave_running OFF/ON
我需要从一个简单的插件查询中返回一个数值,任何人都有任何想法......我的想法是 return 3-LENGTH(Slave_running)
这将 == 1 for ON 0 表示关闭,但以这种方式使用 return 值时遇到问题。
全局状态变量可以在 information_schema.GLOBAL_STATUS
table 中访问,您可以从中查询值。这使得根据 ON/OFF
状态有条件地将其转换为 0 或 1 变得容易。
例如:
> SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running';
+----------------+
| VARIABLE_VALUE |
+----------------+
| ON |
+----------------+
所以要将其转换为零或一,有几种可能性。 MySQL 会将布尔值视为 0 或 1,因此您可以直接比较它 = 'ON'
将上面的内容包装在子查询中(因为它 returns 一个值)并与 'ON'
:
> SELECT (
'ON' = (SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running')
) AS state;
+-------+
| state |
+-------+
| 1 |
+-------+
或格式为 CASE
:
> SELECT CASE WHEN (
SELECT VARIABLE_VALUE
FROM information_schema.GLOBAL_STATUS
WHERE VARIABLE_NAME = 'slave_running') = 'ON' THEN 1
ELSE 0 END AS state;
+-------+
| state |
+-------+
| 1 |
+-------+
在上面两个中,我将结果别名为 'state'
,但您可以使用任何列别名来读取输出,相应地替换 AS state
。
那里已经有什么了?
我忍不住想知道是否已经有为此目的构建的 Nagios 插件,并且 found this as a possibility。
我会强烈考虑使用:
SHOW SLAVE STATUS
作为您的信息查询。这为您提供了更多要监控的关键字段。
据此,您可能会考虑对以下字段发出警报:
Slave_IO_Running: Yes / No (tells you if binary log feed from master is working)
Slave_SQL_Running: Yes / No (tells you if slave's SQL execution thread is runing)
Seconds_Behind_Master: INT value (you should set appropriate low value here to alarm off of)
Slave_running
全局状态可以确定整体状态(当 IO 线程和 SQL slave 上的线程都为 运行 时,该值仅为 'On'),但在更精细的监控方面可能无法满足您的需求。例如,IO 线程中的中断可能被认为是比 SQL 线程中断更严重的事件(并且可能具有完全不同的恢复方案)。 Seconds_Behind_Master
也可能是监控的关键,因为您可能同时拥有 IO 和 SQL 线程 运行,但没有意识到从属由于某种原因无法跟上。
如果您需要将从属状态值的结果转换为 INT 值结果,您可以这样做:
SELECT
(CASE WHEN a.Slave_IO_Running = 'Yes' THEN 1 ELSE 0 END)
AS Slave_IO_Running,
(CASE WHEN a.Slave_SQL_Running = 'Yes' THEN 1 ELSE 0 END)
AS Slave_SQL_Running,
a.Seconds_Behind_Master AS Seconds_Behind_Master
FROM (SHOW SLAVE STATUS) AS a