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!