Monit não pode detectar o MySQL, mas eu posso

2

O Monit está configurado para assistir ao MySQL no localhost na porta 3306.

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

Meu aplicativo, que está configurado para se conectar ao MySQL via localhost: 3306, está rodando muito bem e pode acessar o banco de dados. Eu posso até usar o MySQL Query Browser para conectar-me ao banco de dados remotamente através da porta 3306. A porta é totalmente aberta e é possível conectar-se. Portanto, estou bem certo de que está funcionando.

No entanto, a execução de monit -v revela que o Monit não pode detectar o MySQL nessa porta.

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

Isso acontece de forma consistente, até que a Monit decida não rastrear mais o MySQL, conforme configurado.

Como posso começar a solucionar esse problema?

sudo netstat -lnp | grep mysql retorna o seguinte:

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
    
por Matchu 08.01.2011 / 22:30

4 respostas

4

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

Este erro mostra que o monit está tentando se conectar à porta 3306 no host local, que é o endereço IP 127.0.0.1

tcp 0 0 173.230.135.241:3306 0.0.0.0:* LISTEN 14357/mysqld

Esta saída do netstat mostra que o mysqld está escutando no endereço IP mencionado. Não está escutando no host local.

Você também precisa fazer o mysqld escutar no localhost também, ou você precisa dizer ao monit para verificar o endereço IP específico, ao invés de padronizar para localhost.

    
por 10.01.2011 / 05:33
1

Isso funciona para mim - usando o soquete mysql em vez de sua porta (em uma máquina 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
    
por 02.05.2015 / 22:07
0

O seu aplicativo está sendo executado no mesmo servidor que o mysql? A Monit está sendo executada no mesmo servidor?

O Mysql pode estar bloqueando conexões externas.

    
por 08.01.2011 / 22:33
0

Acabei de encontrar esta questão porque tive o mesmo problema. Executando o Monit 5.12.2 o truque é em maiúsculas o protocolo . Isto é o que eu encontrei trabalhando para mim:

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
    
por 05.06.2015 / 15:38