Simple MySQL Linux CRON monitor
Tim Williams • June 24, 2016
Sometimes it becomes necessary to put a simple monitoring service in place for MySQL databases that crash occasionally due to a slim system configuration or other hard to control factors. This script and CRON job can monitor your database for just such an occurrence.
First SSH into your server instance. Create a new Bash script:
[ec2-user@ip-999-99-9-99 ~]$ sudo nano /bin/monitorsql
Of course you can use VI if you like punishment but I prefer Nano. Next paste in the below Bash script. In the if line we are simply checking if the service is running by matching the output of the mysqld status
command. Don’t forget to change the email to your email!
#!/bin/bash
if [[ ! "$(sudo service mysqld status)" =~ "is running..." ]]
then
echo "YourSite.com MySQL stopped running and has restarted " | sudo sendmail -s "YourSite.com mysql restarted unexpectedly" youremail@gmail.com
sudo service mysqld start > /dev/null
fi
Now save the new script and make sure it is executable by running this command.
[ec2-user@ip-999-99-9-99 ~]$ sudo chmod +x /bin/monitorsql
I would suggest testing the script to make sure it does what you expect. To do this, turn off your MySQL service, then run this script. It should email you and turn on the service immediately
[ec2-user@ip-999-99-9-99 ~]$ sudo service mysqld stop
Stopping mysqld: [ OK ]
[ec2-user@ip-999-99-9-99 ~]$ sudo /bin/monitorsql
Finally, add a CRON record to run this script every 5 minutes
[ec2-user@ip-999-99-9-99 ~]$ export VISUAL=nano; crontab -e
Cron record
*/5 * * * * /bin/monitorsql
Remember, this is a stopgap measure meant to get things back up and running in the event something does happen. This should NOT be used as a solution for a faulty MySQL setup. If your database is crashing on a regular basis, look at the logs and make the necessary configuration changes!