fbpx

Shell script to restart MySQL server if it is killed or not working

Shell script to restart MySQL server if it is killed or not working

We will create a bash script and run via cron job and set the time as per your requirement. If you don’t know how to create bash script, please read “How to create Linux bash script”

#!/bin/bash
# Shell script to restart MySQL server if it is killed or not working
# due to ANY causes.
# When script detects mysql is not running (it basically sends ping request
# to MySQL) it try to start using /etc/init.d/mysql script; and it sends an
# email to user indicating the status.
# This script must be run from Cron Job so that it can monitor mysql server.
# For more info visit following url:
# http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/08/linux-mysql-server-monitoring.html
# --------------------------------------------------------------------------
# Copyright (C) 2005 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------
# mysql root/admin username
MUSER="your-username"
# mysql admin/root password
MPASS="your-password"
# mysql server hostname
MHOST="localhost"
#Shell script to start MySQL server i.e. path to MySQL daemon start/stop script.
# Debain uses following script, need to setup this according to your UNIX/Linux/BSD OS.
MSTART="/etc/init.d/mysql start"
# Email ID to send notification
EMAILID="your-email@domain.com"
# path to mail program
MAILCMD="$(which mail)"
# path mysqladmin
MADMIN="$(which mysqladmin)"
#### DO NOT CHANGE anything BELOW ####
MAILMESSAGE="/tmp/mysql.fail.$$"
# see if MySQL server is alive or not
# 2&1 could be better but i would like to keep it simple and easy to
# understand stuff :)
$MADMIN -h $MHOST -u $MUSER -p${MPASS} ping 2>/dev/null 1>/dev/null
if [ $? -ne 0 ]; then
 echo "" >$MAILMESSAGE
 echo "Error: MySQL Server is not running/responding ping request">>$MAILMESSAGE
 echo "Hostname: $(hostname)" >>$MAILMESSAGE
 echo "Date & Time: $(date)" >>$MAILMESSAGE
 # try to start mysql
 $MSTART>/dev/null
 # see if it is started or not
 o=$(ps cax | grep -c ' mysqld$')
 if [ $o -eq 1 ]; then
 sMess="MySQL Server MySQL server successfully restarted"
 else
 sMess="MySQL server FAILED to restart"
 fi
 # Email status too
 echo "Current Status: $sMess" >>$MAILMESSAGE
 echo "" >>$MAILMESSAGE
 echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
 echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE
 # send email
 $MAILCMD -s "MySQL server" $EMAILID < $MAILMESSAGE
else # MySQL is running :) and do nothing
 :
fi
# remove file
rm -f $MAILMESSAGE

Share this post