Wie wichtig die Datenbank für eine Webseiten sein kann, merkt man oft erst dann, wenn Die Datenbank nicht mehr zur Verfügung steht. Aus aktuellem Anlass habe ich mir die mühe gemacht eine Lösung zu suchen, die ein MySQL-Datenbanksystem automatisch startet, sollte das Datenbanksystem mal down sein.
Die Lösung ist ein einfaches Script, welches über einen Cronjob zeitlich gesteuert wird.
Das Script:
Natürlich muss es noch angpasst werden. Das Script leistet im Groben folgendes:
- Prüfung, ob Datenbankserver läuft
- wenn nicht, Datenbankserver starten und Status-Mail an EMAILID
- sonst, tue nichts
#!/bin/bash
#————————————————————————–
# Shell script to restart MySQL server if it is killed or not working
# due to ANY causes.
#————————————————————————–
# mysql root/admin username
MUSER=“root“
# mysql admin/root password
MPASS=“hier passwort eintragen…“
# 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=“mustermann@test.de“
# 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
Download:
mysql_restart_if_down.sh: Download
Der Cronjob:
Ein Cronjob ist eigentlich nichts anderes als ein Zeitlich definiertes Ereignis. Im Allemeinen wird dieser Begriff unter UNIX/LINUX verwendet. Ich kann also Befehle zu regelmäßig wiederkehrenden Zeitpunkten ausführen. Dabei ist es egal, ob ich nur einen einzelnen Systembefehl ausführe oder ein komplexes Shellscript starte.
Ein Cronjob wird durch den Cron Deamon gestartet. Damit der Deamon weiß, wann er was machen soll, muss man ihm das in der Crontab mitteilen. Die Crontab hat folgenden aufbau und ist i.d.R unter /etc/crontab zu finden:
# (Cron version -- $ID: ... 1.5 2000/05/27 12:05:33 work Exp $)
SHELL=/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin
#min hour day month dow user command
# Command jede Minute ausführen:
* * * * * root <todo>
# Jeden Tag um 22.00 h alles im Verzeichnis /public
# incl. Unterverzeichnisse löschen:
0 22 * * * pingu rm -r /public/*
# delpub jeden Sa. um 22:00 h aufrufen
0 22 * * 6 root /root/bin/delpub
# Befehl oder Script alle 5 min ausführen
*/5 * * * * root <todo>
# mail_poll alle 2 Stunden ausführen
00 */2 * * * root /usr/local/bin/mail_poll
Quelle: linuxhilfen.org
Sofern das Script abgespeichert ist und die Crontab angepasst, muss nur noch der Deamon neu gestartet werden.
Das ist es auch schon.
1 comment
Join the conversationTom030 - 7. Mai 2010
Eine gelungene Anleitung, allerdings sollte man schon überlegen, warum die Datenbank down ist, als dass man sie einfach immer wieder neu startet, denke ich.