Hi,
ich habe hier zwei Scripts für Mysql-Datenbanken , die ich für sehr nützlich halte. Ich habe immer nach solchen Lösungen gesucht und nun ganz passable Lösungen für die Probleme Datensicherung und Performance-Erhalt gefunden.
Als Administrator bin ich bemüht, den Server und die Komponenten schnell zu halten. Bei MySQL-Datenbanken wird die Performance nach vielen Änderungen am Datenbestand deutlich schlechter. Darum werden Seiten immer langsamer geladen, wenn sie Daten aus der Datenbank abrufen müssen. Der Grund ist, weil Datenbanken eben auch auf der Festplatte gespeichert werden und allmählich Fragmentieren - also auf der Festplatte verstreut werden. Das kann man schon durch gute Planung berücksichtigen und Tabellen, bei denen viele Änderungen zu erwarten sind, in eine eigene Datenbank setzen. Aber das ist nicht immer möglich und wer Erfahrung hat, weiß, dass man Anfangs nicht immer wissen kann, ob das nötig oder überhaupt zweckmäßig ist.
Ganz sicher ist es, die Datenbanken regelmäßig neu aufsetzen. Also löschen und wiederherstellen. Ich habe das bisher von Hand einmal in der Woche gemacht. Das war kein großes Problem, aber es geht auch einfacher. Mit einem Shell-Skript ( FILE 1 ) habe ich das Problem nun gelöst. Das Script wird automatisch per Cronjob (bei mir einmal pro Tag) aufgerufen und setzt die Datenbanken neu auf. Also erst wird die Datenbank gedumpt, dann alle alten Tabellen aus der Datenbank gelöscht und schließlich wieder hergestellt.Am Ende werden die Dumpfiles wieder gelöscht und das Verzeichnis bereinigt.
Für den Sicherheitsdump von Datenbanken, um Datenverlust vorzubeugen, nutze ich ein anderes Shell-Script ( FILE 2 ). Es erstellt alle drei Stunden Dumpfiles aller Datenbanken und ich kann zur Not jede Datenbank daraus wiederherstellen. Dazu werden die Datenbanken komprimiert auf dem Server gespeichert. Jeder Dump wird drei Tage aufbewahrt, bevor er (auch automatisch vom Script) gelöscht wird. So kann ich zur Not den aktuellsten (heilen) Datenbestand herunterladen und die Datenbanken per PhpMyAdmin von Hand (oder natürlich auch per SSH) wiederherstellen.
Wie gehe ich vor, um das einzurichten:
Zunächst lege ich im Root-Verzeichnis zwei Ordner an. Bei mir sind das /root/dbbacks für die Sicherheitsdumps und /root/dbreset für die Performancedumps. Getrennte Verzeichnisse müssen sein, weil die Dumps unterschiedlich schnell vom jeweiligen Script entsorgt werden. Das könnte man sicher auch Programmiererisch lösen, aber ich finde es so einfach übersichtlicher.
Im Terminal ausführen:
ssh: mkdir /root/dbbacks
ssh: mkdir /root/dbreset
Den erstellten Verzeichnissen verpasse ich nun die bötigen Rechte, damit Dateien erstellt,gelöscht und ausgeführt werden können.
Also die Rechte am Besten auf 777 setzen:
ssh: chmod 777 /root/dbbacks
ssh: chmod 777 /root/dbreset
Dann lade ich die beiden Shell-Scripts auf den Server in das Root-Verzeichnis. Dahin, weil sie sich innerhalb der angelegten Ordner natürlich selbst löschen würden, wenn sie aufgerufen werden. Das Hochladen kann man auf verschiedenen Wegen machen (FTP,SSH oder SCP). Als Root, solltet ihr wissen, wie das geht. Wichtig ist, die Scripts ausführbar zu machen.
Also:
cd /root
ssh: chmod 777 dbbacks.sh
ssh: chmod 777 dbreset.sh
Zuletzt müssen die Cronjobs angelegt werden. Ich verwende Plesk dafür und kann dort für den Root Cronjobs anlegen. Aber es geht auch per SSH mit einem Editor (vi). Dazu die Datei crontab öffnen...
crontab -e
...und folgende Zeilen anhängen:
5 */3 * * * /root/dbbacks.sh >/dev/null 2>&1
30 6 * * * /root/dbreset.sh >/dev/null 2>&1
Der erste Cronjob wird täglich alle 3 Stunden in Minute 5 (also 3:05, 6:05, 9:05 usw.) ausgeführt. Der Untere täglich um 6:30 Uhr. Natürlich kann das individuell angepasst werden.
Dann die Datei wieder speichern:
:wq
Prüfen, ob das Eintragen erfolgreich war:
ssh: crontab -l
Fertig!
LG Bulli
Hier noch die Dateien. Nicht vergessen, vor dem Ausprobieren, eine Sicherheitskopie der Datenbank(en) erstellen !
Für die Verwendung, einfach den Namen des Datenbankbenutzers, dessen Passwort und den Datenbanknamen austauschen:
FILE 1 (dbreset.sh):
FILE 2 (dbbacks.sh):
ich habe hier zwei Scripts für Mysql-Datenbanken , die ich für sehr nützlich halte. Ich habe immer nach solchen Lösungen gesucht und nun ganz passable Lösungen für die Probleme Datensicherung und Performance-Erhalt gefunden.
Als Administrator bin ich bemüht, den Server und die Komponenten schnell zu halten. Bei MySQL-Datenbanken wird die Performance nach vielen Änderungen am Datenbestand deutlich schlechter. Darum werden Seiten immer langsamer geladen, wenn sie Daten aus der Datenbank abrufen müssen. Der Grund ist, weil Datenbanken eben auch auf der Festplatte gespeichert werden und allmählich Fragmentieren - also auf der Festplatte verstreut werden. Das kann man schon durch gute Planung berücksichtigen und Tabellen, bei denen viele Änderungen zu erwarten sind, in eine eigene Datenbank setzen. Aber das ist nicht immer möglich und wer Erfahrung hat, weiß, dass man Anfangs nicht immer wissen kann, ob das nötig oder überhaupt zweckmäßig ist.
Ganz sicher ist es, die Datenbanken regelmäßig neu aufsetzen. Also löschen und wiederherstellen. Ich habe das bisher von Hand einmal in der Woche gemacht. Das war kein großes Problem, aber es geht auch einfacher. Mit einem Shell-Skript ( FILE 1 ) habe ich das Problem nun gelöst. Das Script wird automatisch per Cronjob (bei mir einmal pro Tag) aufgerufen und setzt die Datenbanken neu auf. Also erst wird die Datenbank gedumpt, dann alle alten Tabellen aus der Datenbank gelöscht und schließlich wieder hergestellt.Am Ende werden die Dumpfiles wieder gelöscht und das Verzeichnis bereinigt.
Für den Sicherheitsdump von Datenbanken, um Datenverlust vorzubeugen, nutze ich ein anderes Shell-Script ( FILE 2 ). Es erstellt alle drei Stunden Dumpfiles aller Datenbanken und ich kann zur Not jede Datenbank daraus wiederherstellen. Dazu werden die Datenbanken komprimiert auf dem Server gespeichert. Jeder Dump wird drei Tage aufbewahrt, bevor er (auch automatisch vom Script) gelöscht wird. So kann ich zur Not den aktuellsten (heilen) Datenbestand herunterladen und die Datenbanken per PhpMyAdmin von Hand (oder natürlich auch per SSH) wiederherstellen.
Wie gehe ich vor, um das einzurichten:
Zunächst lege ich im Root-Verzeichnis zwei Ordner an. Bei mir sind das /root/dbbacks für die Sicherheitsdumps und /root/dbreset für die Performancedumps. Getrennte Verzeichnisse müssen sein, weil die Dumps unterschiedlich schnell vom jeweiligen Script entsorgt werden. Das könnte man sicher auch Programmiererisch lösen, aber ich finde es so einfach übersichtlicher.
Im Terminal ausführen:
ssh: mkdir /root/dbbacks
ssh: mkdir /root/dbreset
Den erstellten Verzeichnissen verpasse ich nun die bötigen Rechte, damit Dateien erstellt,gelöscht und ausgeführt werden können.
Also die Rechte am Besten auf 777 setzen:
ssh: chmod 777 /root/dbbacks
ssh: chmod 777 /root/dbreset
Dann lade ich die beiden Shell-Scripts auf den Server in das Root-Verzeichnis. Dahin, weil sie sich innerhalb der angelegten Ordner natürlich selbst löschen würden, wenn sie aufgerufen werden. Das Hochladen kann man auf verschiedenen Wegen machen (FTP,SSH oder SCP). Als Root, solltet ihr wissen, wie das geht. Wichtig ist, die Scripts ausführbar zu machen.
Also:
cd /root
ssh: chmod 777 dbbacks.sh
ssh: chmod 777 dbreset.sh
Zuletzt müssen die Cronjobs angelegt werden. Ich verwende Plesk dafür und kann dort für den Root Cronjobs anlegen. Aber es geht auch per SSH mit einem Editor (vi). Dazu die Datei crontab öffnen...
crontab -e
...und folgende Zeilen anhängen:
5 */3 * * * /root/dbbacks.sh >/dev/null 2>&1
30 6 * * * /root/dbreset.sh >/dev/null 2>&1
Der erste Cronjob wird täglich alle 3 Stunden in Minute 5 (also 3:05, 6:05, 9:05 usw.) ausgeführt. Der Untere täglich um 6:30 Uhr. Natürlich kann das individuell angepasst werden.
Dann die Datei wieder speichern:
:wq
Prüfen, ob das Eintragen erfolgreich war:
ssh: crontab -l
Fertig!
LG Bulli
Hier noch die Dateien. Nicht vergessen, vor dem Ausprobieren, eine Sicherheitskopie der Datenbank(en) erstellen !
Für die Verwendung, einfach den Namen des Datenbankbenutzers, dessen Passwort und den Datenbanknamen austauschen:
FILE 1 (dbreset.sh):
Code:
#!/bin/sh
# Variablen definieren
RESETDIR=/root/dbreset/
DBUSER=USERNAME ANGEBEN
DBPASS=PASSWORT ANGEBEN
# Pfade suchen
MYSQL=$(which mysql)
AWK=$(which awk)
GREP=$(which grep)
#################################################### Diesen Teil je Datenbank wiederholt in das Script eintragen.
DBASE=DATENBANKNAME ANGEBEN
DBASEFILE=$RESETDIR$DBASE.sql
# Datenbank speichern
mysqldump -u $DBUSER -p$DBPASS $DBASE > $DBASEFILE
# Gespeicherte Datei ausfuehrbar machen
chmod u=rwx,g-rwx,o+rwx $DBASEFILE
# Alle Tabellen der Datenbank loeschen
TABLES=$($MYSQL -u $DBUSER -p$DBPASS $DBASE -e 'show tables' | $AWK '{ print $1}' | $GREP -v '^Tables' )
for t in $TABLES
do
$MYSQL -u $DBUSER -p$DBPASS $DBASE -e "drop table $t"
done
# Datenbank wiederherstellen
$MYSQL -u $DBUSER -p$DBPASS $DBASE < $DBASEFILE
####################################################
# Zuletzt die gespeicherte(n) Dateien loeschen
find $RESETDIR -exec rm {} \;
# Script beenden
exit 0;
FILE 2 (dbbacks.sh):
Code:
#!/bin/sh
DATUM=`date +%y%m%d%H`
DUMPDIR=/root/dbbacks/
DBUSER=USERNAME ANGEBEN
DBPASS=PASSWORT ANGEBEN
#################################################### Diesen Teil je Datenbank wiederholt in das Script eintragen.
DBASE=DATENBANKNAME ANGEBEN
DBASEFILE=$DUMPDIR$DBASE$DATUM.sql
# Datenbank speichern
mysqldump -u $DBUSER -p$DBPASS $DBASE > $DBASEFILE
# Gespeicherte Datei ausfuehrbar machen
chmod u=rwx,g-rwx,o+rwx $DBASEFILE
# Gespeicherte Datei komprimieren
gzip $DBASEFILE
####################################################
# Zuletzt die Dateien loeschen, die aelter als 3 Tage sind
find $DUMPDIR -mtime +3 -exec rm {} \;
# Script beenden
exit 0;