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
「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アドレスをチェックするように指示する必要があります。
これは私にとってはうまくいきます-ポートではなく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
同じ問題があったので、この質問を見つけました。 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
アプリケーションはmysqlと同じサーバーで実行されていますか? Monitは同じサーバーで実行されていますか?
Mysqlが外部接続をブロックしている可能性があります。