You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Monit监控MariaDB时因小版本更新导致校验和变更引发监控失效的解决方法咨询

Monit监控MariaDB时因小版本更新导致校验和变更引发监控失效的解决方法咨询

我太懂你这种困扰了——每次MariaDB推小版本更新,Monit就因为/usr/sbin/mysqld和/etc/init.d/mariadb这两个文件的校验和变了触发告警,甚至搞的服务反复重启,之前只能靠重启服务器恢复,确实挺折腾人的。

先给你理清楚问题根源:你配置里的mysql_bin和mysql_rc这两个文件检查项,因为引用了/etc/monit/templates/rootbin模板,默认会校验文件的哈希值。而MariaDB更新时会替换这两个核心文件,校验和自然对不上,Monit就判定服务异常了。

下面给你两个实用的解决思路:

思路一:直接跳过校验和检查(简单粗暴,适合不想折腾的场景)

既然版本更新必然会改文件内容,那我们可以把校验和检查去掉,只监控文件的基础合法性(比如是否存在、所有者是否正确)。修改你的Monit配置:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
  group database
  group mysql
  start program = "/etc/init.d/mariadb start"
  stop  program = "/etc/init.d/mariadb stop"
  if failed host localhost port 3306 protocol mysql with timeout 15 seconds for 3 times within 4 cycles then restart
  if failed unixsocket /var/run/mysqld/mysqld.sock protocol mysql for 3 times within 4 cycles then restart
  if 5 restarts with 5 cycles then timeout
  depend mysql_bin
  depend mysql_rc

# 修改mysql_bin的检查规则,去掉校验和模板
check file mysql_bin with path /usr/sbin/mysqld
  group mysql
  if does not exist then alert
  if uid != root then alert
  if gid != root then alert

# 修改mysql_rc的检查规则,去掉校验和模板
check file mysql_rc with path /etc/init.d/mariadb
  group mysql
  if does not exist then alert
  if uid != root then alert
  if gid != root then alert

这样配置后,Monit只会检查这两个文件是否存在、是否由root用户/组拥有,不再校验文件内容的哈希值,自然就不会因为版本更新触发告警了。

思路二:让Monit自动更新校验和(适合需要保留文件完整性检查的场景)

如果你还是想保留文件内容的校验检查,那可以让系统在MariaDB更新完成后,自动通知Monit重新计算校验和,不用手动操作:

针对Debian/Ubuntu系统(用apt包管理器)

创建一个APT钩子脚本,放在/etc/apt/apt.conf.d/99-monit-mariadb-update,内容如下:

DPkg::Post-Invoke {"if [ -x /usr/bin/monit ]; then monit reload; fi";};

这个脚本会在每次APT完成包更新后,自动执行monit reload,让Monit重新加载配置并更新所有文件的校验和。

针对RHEL/CentOS系统(用yum/dnf包管理器)

在/etc/yum/posttrans.d/目录下创建一个脚本monit-reload.sh,内容:

#!/bin/bash
if [ -x /usr/bin/monit ]; then
  monit reload
fi

然后给脚本加上执行权限:

chmod +x /etc/yum/posttrans.d/monit-reload.sh

这样每次yum/dnf更新完MariaDB后,会自动触发Monit重新计算校验和。

另外,你之前遇到问题时其实不用重启服务器,只需要在命令行执行:

monit reload

或者单独针对这两个服务更新校验和:

monit validate mysql_bin mysql_rc

就能让Monit重新计算哈希值,恢复正常监控了。

备注:内容来源于stack exchange,提问作者neilgee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:49:31