web-dev-qa-db-ja.com

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クエリブラウザを使用して、ポート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
3
Matchu

「mysqld」が失敗しました。TCP経由でINET [localhost:3306]への接続を開くことができません

このエラーは、monitがローカルホストのポート3306(IPアドレス127.0.0.1)に接続しようとしていることを示しています。

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

このnetstat出力は、mysqldが上記のIPアドレスをリッスンしていることを示しています。ローカルホストでリッスンしていません。

Mysqldにlocalhostでもリッスンさせるか、デフォルトでlocalhostにするのではなく、monitに特定のIPアドレスをチェックするように指示する必要があります。

4
Daniel Lawson

これは私にとってはうまくいきます-ポートではなく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
1
Klaus

同じ問題があったので、この質問を見つけました。 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
0
Niko S P

アプリケーションはmysqlと同じサーバーで実行されていますか? Monitは同じサーバーで実行されていますか?

Mysqlが外部接続をブロックしている可能性があります。

0
Publiccert