MySQL Backup mit der bash
Ein kleines HowTo zum automatisierten Backup von MySQL während dem laufenden Betrieb mit Bordmitteln der Shell. Mit variabler Vorhaltezeit. Was leider gar nicht so einfach wie man denkt.
#
# Speichert ALLE Live Datenbanken unter BKUP_PFAD ins Filesystem
# Es werden MySQL select- und lock-Tables-Rechte benötigt
TAR="/bin/tar"
DATE=`date +%Y-%m-%d_%H`
RSYNC="rsync --rsh ssh -avzltpou --partial --delete --bwlimit=20 "
BKUPvorhaltezeit=14 # Tage
BKUP_PFAD="/pub/backup/mysql" # ohne trailing slash
quellen="/etc/ /root/ /srv/"
ziel="$BKUP_PFAD/$DATE/backup_$DATE.tgz"
MySqlPW="P/\$$\/\/0rT"
##############################
############################## Functions
##############################
doMySqlBackup () {
echo "Alle MySQL-Datenbanken sichern:"
# Bereinigte Liste der Datenbanken erzeugen
mysqlshow -p$MySqlPW | awk '{print $2}' | grep -v Databases | sort >/tmp/dbaselist.txt
# Wohin sollen die Backups geschrieben werden?
mkdir -p $BKUP_PFAD/$DATE
[ ! -d $BKUP_PFAD/$DATE ] && {
echo "Das Skript $0 kann $BKUP_PFAD/$DATE nicht anlegen BEENDE!!";
exit 1;
}
HEUTE=$BKUP_PFAD/$DATE
cd $HEUTE
echo "Datenbank: Backup-Pfad: $HEUTE"
#mkdir -p mysql_$DATE
#cd mysql$DATE
for x in `cat /tmp/dbaselist.txt`; do
echo "Datenbank: $x sichern"
mysqldump --opt -p$MySqlPW $x >$DATE-$x.sql
echo "Datenbank: $x zippen"
gzip -9 -f $DATE-$x.sql
done;
rm /tmp/dbaselist.txt
}
doBackup () {
cmd="$TAR -czf $ziel $quellen "
echo "cmd : $cmd"
$cmd # 2>/dev/null
}
#---------------------------------------------------------- delete all old backup filez
delOldBackups () {
cd $BKUP_PFAD
find $BKUP_PFAD -mtime +$BKUPvorhaltezeit -exec rm {} \;
}
##############################
############################## MAIN
##############################
echo
echo "Starte Backup $0 "
anfang=`date "+%Y_%m_%d %H:%M:%S"`
echo "start : $anfang"
echo "quelle: $quelle"
echo "ziel : $ziel"
doMySqlBackup
#doBackup
#delOldBackups
ende=`date "+%Y_%m_%d %H:%M:%S"`
echo "ende : $ende"
echo
MySQL-Backup -> die kurze Version (nur bedingt für produktive Systeme zu empfehlen)
#!/bin/sh
# mysqlbackup.sh
DBUSER=backup-user
DBPW=HelloHacker
HOST=`/bin/hostname`
BACKUP_DIR=${1:-/srv/backup/mysql/$HOST}
EXPIRETIME=14
DATE=`date "+%Y%m%d"`
# Sicherstellen, dass $BACKUP_DIR existiert
if [ ! -d $BACKUP_DIR ]; then
mkdir -p $BACKUP_DIR
chmod 0700 $BACKUP_DIR
fi
echo "Script:\t$0"
echo "Server:\t$HOST"
echo "Folder:\t$BACKUP_DIR"
# Backups erstellen
for i in /var/lib/mysql/*/; do
DBNAME=`basename "$i"`
DSTFN=$BACKUP_DIR/$DATE.$DBNAME.gz
echo "\tdumping $DBNAME "
mysqldump --user $DBUSER --password=$DBPW "$DBNAME" | gzip -9 > $DSTFN
done
#Alte Backups loeschen
find $BACKUP_DIR -mtime +${EXPIRETIME} -exec rm {} \;






Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!