revidering av backup-script: mysql
Postat: 16 mar 2011, 17:30
Tjenis alla bashare.
Har knackat ihop ett litet script för att dumpa alla mysql databaser och tänkte hör med er om åsikter, revidering och dubbelkoll på att jag tänkt optimalt.
Jag har en maskin som tar backup med hjälp av rdiff-backup varje natt, den tar blandannat backup på /var/backups/mysql/current_* på min MySQL server.
På MySQL-servern så körs en dump på samtliga databaser och skapar samtidigt en hard link till current_<db-name>.tar.gz.
nu hade jag tänkt kolla med er om jag missat någon sanity-check eller gjort något klumpigt i mitt sciptande, jag vet att det finns många extremt bra kodare här som säkert kan komma med någon bra input.
Tack på förhand.
p.s. jag funderar på att lägga in en "exclude databas list", men har inte det behovet ännu, så jag sket i det :)
p.p.s funderar på om inte borttagningen av gamla backupper är onödigt riskabelt? den kontrollerar ju inte filtyp eller filnamn, eller är jag onödigt paranoid?
//Barre
Har knackat ihop ett litet script för att dumpa alla mysql databaser och tänkte hör med er om åsikter, revidering och dubbelkoll på att jag tänkt optimalt.
Jag har en maskin som tar backup med hjälp av rdiff-backup varje natt, den tar blandannat backup på /var/backups/mysql/current_* på min MySQL server.
På MySQL-servern så körs en dump på samtliga databaser och skapar samtidigt en hard link till current_<db-name>.tar.gz.
Kod: Markera allt
#!/bin/bash
DATE_PREFIX=$(date +%G-%m-%d)
MYSQL_USER="root"
MYSQL_PWD="secret"
BACKUP_DIR="/var/backups/mysql"
GZIP="/bin/gzip"
MYSQLDUMP="/usr/bin/mysqldump"
MYSQLCLIENT="/usr/bin/mysql"
FIND="/usr/bin/find"
DAYS_TO_KEEP_OLD_BACKUPS="4" #how many days should you keep the old backups
#remove old backups
$FIND $BACKUP_DIR -maxdepth 0 -mtime +$DAYS_TO_KEEP_OLD_BACKUPS -exec rm -f {} \;
# get a list of databases
DBLIST=$( ${MYSQLCLIENT} --skip-column-names --batch --user=$MYSQL_USER --password=$MYSQL_PWD --execute="SHOW DATABASES;" )
#dump databases in seperate files an gzip them
umask 027
cd $BACKUP_DIR || exit 1
for db in $DBLIST; do
SKIP_LOCK=""
[ "$db" == "information_schema" ] && SKIP_LOCK="--skip-lock-tables"
DUMP_FILE_NAME="${DATE_PREFIX}_${db}.tar.gz"
$MYSQLDUMP --force --opt $SKIP_LOCK --user=$MYSQL_USER --password=$MYSQL_PWD --databases $db | \
$GZIP > $DUMP_FILE_NAME
[ -f current_${db}.tar.gz ] && rm current_${db}.tar.gz
ln $DUMP_FILE_NAME current_${db}.tar.gz
done
Tack på förhand.
p.s. jag funderar på att lägga in en "exclude databas list", men har inte det behovet ännu, så jag sket i det :)
p.p.s funderar på om inte borttagningen av gamla backupper är onödigt riskabelt? den kontrollerar ju inte filtyp eller filnamn, eller är jag onödigt paranoid?
//Barre