Monit 无法检测到 MySQL,但我可以

Monit 无法检测到 MySQL,但我可以

Monit 配置为在本地主机的 3306 端口上监视 MySQL。

check process mysqld with pidfile /var/lib/mysql/li175-241.pid
  start program = "/etc/init.d/mysql start"
  stop program = "/etc/init.d/mysql stop"
  if failed port 3306 protocol mysql then restart
  if 5 restarts within 5 cycles then timeout

我的应用程序配置为通过 localhost:3306 连接到 MySQL,运行良好,可以访问数据库。我甚至可以使用 MySQL Query Browser 通过端口 3306 远程连接到数据库。该端口完全开放,可以连接。因此,我非常确定它正在运行。

但是,运行后monit -v发现 Monit 无法在该端口上检测到 MySQL。

'mysqld' failed, cannot open a connection to INET[localhost:3306] via TCP

这种情况一直发生,直到 Monit 决定不再按照配置跟踪 MySQL。

我该如何开始解决此问题?


sudo netstat -lnp | grep mysql返回以下内容:

tcp        0      0 173.230.135.241:3306    0.0.0.0:*               LISTEN      14357/mysqld    
unix  2      [ ACC ]     STREAM     LISTENING     265228   14357/mysqld        /var/run/mysqld/mysqld.sock

答案1

‘mysqld’失败,无法通过 TCP 打开与 INET[localhost:3306] 的连接

此错误表明 monit 正在尝试连接到 localhost 上的端口 3306,即 IP 地址 127.0.0.1

tcp 0 0 173.230.135.241:3306 0.0.0.0:* 监听 14357/mysqld

此 netstat 输出显示 mysqld 正在监听上述 IP 地址。它没有监听 localhost。

您要么需要让 mysqld 也在本地主机上监听,要么需要告诉 monit 检查特定的 IP 地址,而不是默认为本地主机。

答案2

这对我有用——使用 mysql 套接字而不是它的端口(在 debian 机器上):

check process mysql with pidfile /var/run/mysqld/mysqld.pid
   group database
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"
   #if failed host 192.168.1.222 port 3306 protocol mysql then restart
   if failed unix "/var/run/mysqld/mysqld.sock" protocol mysql then restart
   depends on mysql_bin
   depends on mysql_rc

 check file mysql_bin with path /usr/bin/mysql
   group database
   if failed checksum then unmonitor
   if failed permission 755 then unmonitor
   if failed uid root then unmonitor
   if failed gid root then unmonitor

 check file mysql_rc with path /etc/init.d/mysql
   group database
   if failed checksum then unmonitor
   if failed permission 755 then unmonitor
   if failed uid root then unmonitor
   if failed gid root then unmonitor

答案3

您的应用程序是否与 mysql 在同一台服务器上运行?Monit 是否在同一台服务器上运行?

Mysql 可能正在阻止外部连接。

答案4

我刚刚发现这个问题,因为我遇到了同样的问题。运行 Monit 5.12.2 的诀窍是大写协议。以下是我发现对我有用的方法:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
    group database
    start program "/root/scripts/restart.mysql.sh" with timeout 900 seconds
    stop program = "/etc/init.d/mysql stop"
    if failed port 3306 protocol MYSQL then restart
    if failed unixsocket /var/run/mysqld/mysqld.sock protocol MYSQL then restart
    if 5 restarts within 5 cycles then timeout
    depends on mysql_bin
    depends on mysql_rc

相关内容