A small bash backup script for WordPress

As most of you know I work as an Escalation Engineer at Combell.com. Recently I crafted a tiny backup script that makes backups of my own site. While this script is optimized for use on shared servers at Combell.com, it can easily be adapted to be used anywhere.

#!/bin/bash

#### Settings ####
NOW=$(date +"%Y-%m-%d-%H%M")
FULL_PATH=$(pwd)
BACKUP_FOLDER=$FULL_PATH/data/

#### Site-specific Info ####
SITE_PATH="www" #Could also be subsites/subsitename
DB_NAME=`cat $SITE_PATH/wp-config.php | grep DB_NAME | cut -d \' -f 4`
DB_USER=`cat $SITE_PATH/wp-config.php | grep DB_USER | cut -d \' -f 4`
DB_PASS=`cat $SITE_PATH/wp-config.php | grep DB_PASSWORD | cut -d \' -f 4`
DB_HOST=`cat $SITE_PATH/wp-config.php | grep DB_HOST | cut -d \' -f 4`

#### Files backup ####

function files_backup {
    zip -r $SITE_PATH.$NOW.zip $SITE_PATH
    mv $SITE_PATH.$NOW.zip $BACKUP_FOLDER
}

#### Database Backup ####
function database_backup {
    mysqldump -h $DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME > $DB_NAME.$NOW.sql
    mv $DB_NAME.$NOW.sql data/$DB_NAME.$NOW.sql
}

#### Runner Class ####
files_backup
database_backup

This script can be run automatically on a Combell-server by adding a cron for this script. You can do this in /etc/crontab by adding for example this:

0 */6 * * * /bin/sh /data/sites/web/youraccountname/backup.sh

The cron above will create a backup every six hours. Do not forget to put this backup.sh script in the root of your account.

Hope this helps you guys.

PS: the FULL_PATH variable is already included since I’m planning to iterate on this script and add more features, even though it’s currently only used to declare the backup directory path.

2 reacties

Jouwe toevoegen

  1. Running scripts automatically via cron is a handy way to manage backups efficiently. Adding the script to the root directory ensures it’s easily accessible and executable. Including the FULL_PATH variable is a smart move for future iterations and scalability. This setup should work seamlessly on a Combell-server. How will you handle backup retention and cleanup in your future updates?

  2. Hi, thanks for your response. To ensure cleanup of the older backups, you could use something like mtime in a find command to delete files older than x-amount of days.

    Small (untested) example to delete backups older than 30 days:
    find /location/of/your/backups/ -type f -mtime +30 -delete

    Hope this helps you in the right direction.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *