I used this script to monitor the status of the mysql daemon. First it checks for the running daemon via ps and if that succeeds then it tries to issue a mysqladmin ping to verify that server is responding. Faliure of either will issue a reboot. The script logs to syslog so as a cron job and generally redirect output to /dev/null
#!/usr/local/bin/perl #Simple Mysql Daemon Watcher.... #Written by Mike Tremaine mgtstellarcore.net #02/14/2003 #Globals my $mysqladmin = "/usr/local/bin/mysqladmin"; my $mysql_user = "-u nobody"; my $mysql_password = ""; my $mysql_server_start = "/etc/init.d/mysqld start"; my $mysql_server_stop = "/etc/init.d/mysqld stop"; #Stage 1 my $call = "ps -ef | grep 'mysqld' | grep -v 'tail -f' | grep -v grep"; my @daemons = grep { index( $_, 'grep' ) == -1 } `$call`; if( (scalar @daemons) ) { #Mysql is running lets do the ping print "Daemon running onto ping test\n"; } else { print "daemon not running restarting\n"; `logger -p daemon.notice -t mysql_pinger 'Mysql deamon is not running..restarting'`; `$mysql_server_start`; exit; }; #Stage 2 if (-e "$mysqladmin") { my $status = `$mysqladmin $mysql_user ping 2>&1`; chomp $status; if ($status == "mysqld is alive") { #Everything is fine just exit exit; } elsif ( $status =~ /access denied/im) { print "Password Failed $status please check the script\n"; `logger -p daemon.notice -t mysql_pinger 'Password Failed please check the script'`; exit; } else { #Time to reboot print "Mysql database is not alive..restarting\n"; `logger -p daemon.notice -t mysql_pinger 'Mysql database is not alive..restarting'`; `$mysql_server_stop`; sleep 5; `$mysql_server_start`; } } else { print "Unable to find mysqladin\n"; } exit;