LAMP backups

I recently moved some websites and I’m “re-setting up” my backups. I like to keep rolling daily and monthly backups, so I wrote a small bash script that looks like this:

 export BACKUP_ROOT=/root/www-backup
 if [ $1 = "daily" ]; then
    export BACKUP_SUBDIR1=daily
    export BACKUP_SUBDIR2=$(date +\%A)
 elif [ $1 = "monthly" ]; then
    export BACKUP_SUBDIR1=monthly
    export BACKUP_SUBDIR2=$(date +\%B)
   export BACKUP_SUBDIR1=adhoc
   export BACKUP_SUBDIR2=$(date +\%F)
 echo "Ensuring backup path \"$BACKUP_FULLPATH\" exists"
 echo "Updating httpd.conf backup file in /var/www/conf-backup/"
 /bin/rsync -u /etc/httpd/conf/httpd.conf /var/www/conf-backup/
 echo "Updating files in $BACKUP_FULLPATH (from /var/www)"
 /bin/rsync -ax --delete /var/www/ $BACKUP_FULLPATH/

Then I have a bunch of database backup lines in my crontab that take the general form:

@daily mysqldump --password=dbPass --user=dbUser --host=dbHost --add-drop-table dbName > /var/www/dbName.sql

Finally, I have two other cronjobs that look like this to call the script:

daily /root/ daily
@monthly /root/ monthly

I’ll do something else to occasionally backup the files to another server, but this gets things started.

Side note: During my experimentation (moving from an old server to a new one) I used a small C++ app I wrote to do help with the migration: Writing this in C++ probably seems a little odd (and it is). Bash or Python make more sense. However, I had some other reasons for doing this (mainly using this “lampbackup” project to experiment with a few C++ related things).

Leave a Comment