|
Websites
|
|
Wednesday, 15 June 2011 09:45 |
Here's a quickie Wordpress backup script that I wrote. It gets the job done and may be useful to others. It assumes that it is being run as root and that backups are stored at /root/backups. Enjoy!
#!/bin/bash
#####################################################################################
# backup-blog
# Author: Dustin McQuay
#
# Simple script to backup a wordpress blog, including it's database.
#
# Usage: backup-blog [name] [source_directory]
# Example: backup-blog myblog /var/www/html/myblog
#
# You probably want to set it up to run daily using cron:
# 0 0 * * * backup-blog myblog /var/www/html/myblog
#####################################################################################
#set up file names and such
backup_name=$1
backup_source=$2
backup_root=/root/backups
backup_target_filename=$backup_name-`date +%F`.tar.gz
days_to_keep_backups=14
#ouptut this config
echo "backup_name=$backup_name"
echo "backup_source=$backup_source"
echo "backup_root=$backup_root"
echo "backup_target_filename=$backup_target_filename"
echo "days_to_keep_backups=$days_to_keep_backups"
echo
#acquire mysql creds
db_name=`grep DB_NAME $backup_source/wp-config.php | awk -F\' '{print $4}'`
db_user=`grep DB_USER $backup_source/wp-config.php | awk -F\' '{print $4}'`
db_pass=`grep DB_PASSWORD $backup_source/wp-config.php | awk -F\' '{print $4}'`
db_host=`grep DB_HOST $backup_source/wp-config.php | awk -F\' '{print $4}'`
#backup the database
echo -n "Creating database dump file: "
echo "mysqldump -u $db_user -h $db_host --password=$db_pass $db_name > $backup_source/dbdump.sql"
mysqldump -u $db_user -h $db_host --password=$db_pass $db_name > $backup_source/dbdump.sql
if [[ "$?" != "0" ]]; then exit; fi
#tar up the files, including db dump
echo -n "Archiving files to backup target: "
echo "tar -cz -f $backup_root/$backup_target_filename -C" `dirname $backup_source` `basename $backup_source`
tar -cz -f $backup_root/$backup_target_filename -C `dirname $backup_source` `basename $backup_source`
if [[ "$?" != "0" ]]; then exit; fi
#delete dbdump from backup_source because it is probably web accessible
echo -n "Removing dbdump: "
echo "rm $backup_source/dbdump.sql"
rm $backup_source/dbdump.sql
if [[ "$?" != "0" ]]; then exit; fi
#clean up? (delete backups older than x days???)
echo -n "Removing old backups: "
echo "rm -f \`ls $backup_root/$backup_name* -1 | head -n -$days_to_keep_backups\`"
rm -f `ls $backup_root/$backup_name* -1 | head -n \-$days_to_keep_backups`
if [[ "$?" != "0" ]]; then exit; fi
echo
echo "Backup completed successfully at "`date`
|