Redémarrer automatiquement MySQL avec Monit
Sans vouloir être plus mauvaise langue que d'habitude, inviter WordPress sur son serveur l'expose à un tas de problèmes, qu'ils soient liés ou non à des attaques extérieures. Passer de zéro plantages à un par semaine laisse pour le moins perplexe.
Quelle que soit la cause, au final, on peut vouloir faire surveiller son MySQL par un superviseur indépendant, lequel le relancera si besoin; différentes solutions existent, je décrirai ici l'utilisation de monit, qui a largement fait ses preuves.
L'installation est on ne peut plus classique:
apt-get install monit
Monit bénéficie d'une interface web intégrée mais laissons-la de côté pour le moment, on veut d'abord pouvoir communiquer avec monit via la ligne de commande; il se trouve que pour ça il va falloir de toutes manières activer l'interface http, le client monit l'utilise pour dialoguer avec le démon.
Dans le fichier '/etc/monit/monitrc', décommentez les deux lignes suivantes:
# set httpd port 2812 and # allow localhost
Puis appliquez les modifications avec la commande suivante:
monit reload
Vous pouvez maintenant utiliser la ligne de commande suivante:
monit status
Vous obtiendrez un résultat de ce style:
The Monit daemon 5.9 uptime: 0m System 'lorien.riffzone.net' status Running monitoring status Monitored load average [0.00] [0.01] [0.05] cpu 0.1%us 0.1%sy 0.0%wa memory usage 243.5 MB [49.2%] swap usage 0.0 B [0.0%] data collected Mon, 01 Jan 2018 16:11:56
Maintenant que monit est opérationnel, apprenons-lui à surveiller MySQL. Il se trouve qu'un superviseur MySQL fait déjà partie du package monit, voici le détail du fichier de configuration monit correspondant:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid group database group mysql start program = "/etc/init.d/mysql start" stop program = "/etc/init.d/mysql 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 check file mysql_bin with path /usr/sbin/mysqld group mysql include /etc/monit/templates/rootbin check file mysql_rc with path /etc/init.d/mysql group mysql include /etc/monit/templates/rootbin
Pour l'activer, il suffit de créer un lien symbolique vers ce fichier de configuration, que l'on placera dans '/etc/monit/conf.d', puis de valider les modifications comme précédemment:
ln -s /etc/monit/monitrc.d/mysql /etc/monit/conf.d/mysql monit reload
Relancez la commande 'monit status' et examinez les nouveaux résultats, MySQL est maintenant monitoré comme voulu.
Les automatismes c'est bien, être notifié c'est mieux. Dans le fichier '/etc/monit/monitrc', ajoutez la ligne suivante:
set alert admin@monsite.com
en remplaçant bien sûr 'admin@monsite.com' par votre propre adresse mail. Validez comme d'habitude les changements par la commande 'monit reload' et c'est fait, vous serez notifié à chaque alerte.