I've used this script in the past to create rotated daily backups with mysqldump:
/usr/local/sbin/mybackup
Code:
#!/bin/sh
# User-defined parameters
BACKUPDIR=/backup/mysql
DBUSER="root"
DBPASS="ROOT_PASSWORD"
DBLIST="db1 db2" # names of all DB's to back up
ROTATE=8 # keep this many backups
#DBHOST= # leave empty for local socket, else hostname
#DBPORT=3306
LOG="$BACKUPDIR/mybackup.log"
###########################################################################
### Here be monsters, cap'n! ###
echo -n `date -R` >> $LOG
echo " MySQL backup procedure starting" >> $LOG
TODAY=`date +%y%m%d`
STALE=`date +%y%m%d --date="$ROTATE days ago"`
for D in `echo $DBLIST`
do
NEWFILE="$BACKUPDIR/dump-$D.$TODAY"
OLDFILE="$BACKUPDIR/dump-$D.$STALE"
echo "Creating backup file $NEWFILE" >> $LOG
mysqldump --user=$DBUSER --password=$DBPASS $D > $NEWFILE 2>>$LOG 3>>$LOG
echo "Deleting stale backup file $OLDFILE" >> $LOG
rm -f $OLDFILE 2>>$LOG 3>>$LOG
done
echo -n `date -R` >> $LOG
echo " MySQL backup procedure completed" >> $LOG
It includes the root password insecurely, though you can limit the damage with root ownership and 0700 permissions.
To have this process run nightly, add a symbolic link to the script in /etc/cron.daily like this:
Code:
cd /etc/cron.daily
sudo ln -s /usr/local/sbin/mybackup
Bookmarks