Datenbanken kopieren und sichern mit mysqldump

Datenbanken kopieren und sichern mit mysqldump

Oftmals muss man Datenbanken kopieren und sichern.
Die eigentliche Funktion ist simpel.
Mit einem Script kann man sich regelmäßigkeit natürlich auch sparen.

Installation:

sudo apt-get install mysqldump

Datenbanksicherung:
Mit einem simplen Befehl kann man es sichern:

mysqldump -u DATENBANKUSERNAME -p DATENBANKNAME > SQLfile.sql

Info:

  • Option –opt: ist standardmäßig aktiviert.
  • Option -u: Benutzername
  • Option -p: Password verwenden

Datenbank Sicherung zurückspielen

Die Sicherung wird anschließend dem gleichen Befehl zurückgespielt, der einzige Unterschied ist die Ausgaberichtung:


mysql -u DATENBANKUSERNAME -p DATENBANKNAME < SQLfile.sql

Automatisierung:
Möchte man das ganze automatisieren kann man das als Script realisieren:

#!/bin/bash
#Variablen
# Anzahl, der max. Speicherungen
SAFE=2
#Pfad
PATH="/home/$USER"
#Datenbank
DATABASE=db_xyz
DBUSER=MyUser
DBPW=MyPw

BACKUPS=`find $PATH -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'`
while [ $BACKUPS -ge $SAFE]
do
ls -tr1 $PATH/mysqldump-*.gz | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done
DATE=`date +%Y%m%d%H%M%S`
rm -f $PATH/.mysqldump-${DATE}.gz_INPROGRESS
/usr/syno/mysql/bin/mysqldump --opt -u$DBUSER -p$DBPW $DATABASE | gzip -c -9 > $PATH/.mysqldump-${DATE}.gz_INPROGRESS
mv -f $PATH/.mysqldump-${DATE}.gz_INPROGRESS $PATH/mysqldump-${DATE}.gz
exit 0

Cronjob:

# Command jede Minute ausführen:
* * * * * root sh /home/$USER/mysqlbackup.sh
# Jeden Tag um 22:00 h ausführen
0 22 * * * root sh /home/$USER/mysqlbackup.sh
# Jeden Sa. um 22:00 h ausführen
0 22 * * 6 root sh /home/$USER/mysqlbackup.sh
# Alle 5 min ausführen
*/5 * * * * root sh /home/$USER/mysqlbackup.sh
# Alle 2 Std. ausführen
00 */2 * * * root sh /home/$USER/mysqlbackup.sh
# Von Mo. bis Fr. um 01:00 h ausführen
0 1 * * 1-5 root sh /home/$USER/mysqlbackup.sh