Website-Icon .: blog cscholz.io :.

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 das 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.Mai.8._web1sql1.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 "33[40;1;32m Done 33[0m..."
echo ""

Sicherung auf ein Remote System

Sollte auf dem Sicherungsystem nicht genügend Platz vorhanden sein oder die Sicherung soll direkt auf einen zentralen Server laufen, so kann nach der Einrichtung der PublicKey Authentifizierung für einen Schlüssel ohne Kennwort das das obige script angepasst werden, indem die Zeile

tar cfvz $6.$3.$2_$x.tar.gz $x.sql > /dev/null 2>&1

durch die Zeile

tar zcvf - /var/backup/$x.sql | ssh -p 22 root@domain.tld "cat > /zielverzeichniss/auf/dem/Server/$6.$3.$2_$x.tar.gz"

 ersetzt wird. Servername etc. muss wie immer angepasst werden. Anschließend läuft die Sicherung direkt auf den Zeilserver.

Ein Beispielscript kann hier herunter geladen werden.

Datenbank wiederherstellen

mysqladmin -u root -p create <database>
mysql -u root -p --default-charachter-set=utf8 <database> < backup.sql
Die mobile Version verlassen