===== Datenbanken =====
==== Alle vorhandenen Datenbanken anzeigen: ====
user~/> echo "show databases" | mysql -uroot | grep -v Database | grep -v information_schema
Dieser Aufruf setzt voraus, dass im Heimatverzeichnis eine Konfigurationsdatei .my.cnf existiert, die das root-Passwort enthält. Damit muss beim Aufruf das Passwort nicht mehr angegeben werden.
user~/> cat /home/user/.mycnf
[mysqldump]
user=root
password=##########
[mysql]
user=root
password=##########
====Ein Skript, das für jede Datenbank ein Backup erstellt. ====
user~/> vi /home/user/bin/dbbackup.sh
#!/bin/bash
# Backupskript für eine MySQL-Datenbank
# Alle Datenbanken werden in je einer Datei im temporären Ordner /tmp gesichert.
DBUSER="root"
DATUM=`date +"%y-%m-%d"`
ZIEL="/backup"
# Datenbanken einlesen, Database und information_schema weglassen
DATABASES=`echo "show databases" | mysql -u$DBUSER | grep -v Database | grep -v information_schema`
# für jede Datenbank einen Dump erstellen
for db in $DATABASES; do
mysqldump --force --opt -u$DBUSER --databases $db | gzip --best -c -f > "$ZIEL/$db-$DATUM.sql.gz"
done
====Periodisches Ausführen des Skripts mit einem cron-Job ====
$> crontab -e
# m h dom mon dow command
00 05 \* \* \* /home/user/bin/dbbackup.sh
====Verwendung von logrotate====
Damit über die Zeit nicht zu viele Backups gesichert werden, können mit logrotate jeweils eine bestimmte Anzahl von Backups gesichert werden.
$> sudo vi /etc/logrotate.d/mysql_backups
/backup/*.gz {
daily
rotate 7
nocreate
nocompress
sharedscripts
postrotate
/home/user/bin/dbbackup.sh || true
endscript
}
Die Konfigurationsdatei kann mit folgendem Befehl getestet werden:
user~> sudo logrotate -f /etc/logrotate.d/mysql_backups