MySQL: alle Datenbanken sichern
Um alle Datenbanken eines MySQL Servers zu sichern kann man entweder ein Script schreiben, in dem alle Datenbank Namen fest eingetragen werden oder man zieht sich zum Zeitpunkt der Sicherung alle Datenbank Namen und sichert jede gefunden. Die letzte Möglichkeit möchte ich kurz beschreiben.
Nachfolgendes script speichert in der Variable DBASELIST alle Datenbanknamen. Anschließend werden die noch noch im Cache befindlichen Operationen geschrieben (flush tables) und jede Datenbank anschließend mit einem write lock versehen. Dadurch ist es nicht mehr möglich, dass während der Sicherung noch Veränderungen an der Datenbank vorgenommen werden. Anschließend wird in einer for Schleife jede DB gesichert. Jede Datenbank wird dabei in einem tar.gz Archiv verpackt, dass das aktuelle Datum und den Datenbanknamen trägt.
Beispiel: 2008.June.18._web34sql2.tar.gz
Ist die Sicherung erfolgt so werden alle Tabellen wieder freigegeben.
#!/bin/bash
set $(date)
str_Tag=$(date +%A);
echo "********** saving MySQL-Databases ****"
DBASELIST=`mktemp`
mysqlshow -p<Password> | awk '{print $2}' | grep -v Databases | sort >$DBASELIST
# Wohin sollen die ganzen Backups geschrieben werden?
cd /var/backup
# MySQL Cache auf HD schreiben und Tabellen vor Veränderungen schützen
mysql -u root -p<Password> mysql -e "flush tables with read lock" -v
# Sicherung der einzelnen Tabellen
for x in `cat $DBASELIST`; do
echo " saving database: $x";
mysqldump --opt -p<Password> $x >$x.sql;
tar cfvz $6.$3.$2_$x.tar.gz $x.sql > /dev/null 2>&1
done;
echo
# Tabellen nach der Sicherung wieder freigeben
mysql -u root -p<Password> mysql -e "unlock tables" -v
rm *.sql
echo -e "\033[40;1;32m Done \033[0m..."
echo ""
| < Zurück | Weiter > |
|---|


