Skip to content

Instantly share code, notes, and snippets.

@xanderio
Last active November 17, 2015 18:43
Show Gist options
  • Save xanderio/aeaaba16be451150845f to your computer and use it in GitHub Desktop.
Save xanderio/aeaaba16be451150845f to your computer and use it in GitHub Desktop.
#!/bin/bash
# crontab -e
# 0 6 * * * /opt/scripts/backup_daily.sh > /var/backups/latest.log 2>&1
# thanks to founderio i was able to create this script
MYSQL_CONF=/etc/mysql/debian.cnf
# Ignore mysql system dbs and the cloud db, as that is backed up independently (to reduce downtime of owncloud)
IGNORE="cloud|phpmyadmin|mysql|information_schema|performance_schema|test"
BACKUP_DIR=/var/backups
BACKUP_DIR_OWNCLOUD_DATA=$BACKUP_DIR/owncloud-data.backup
BACKUP_DIR_OWNCLOUD_CONFIG=$BACKUP_DIR/owncloud-config.backup
BACKUP_DIR_MYSQL_LATEST=$BACKUP_DIR/mysql.latest
BACKUP_DIR_MYSQL=$BACKUP_DIR/mysql.backup
BACKUP_DIR_ETC=$BACKUP_DIR/etc.backup
BACKUP_DIR_PHONE_BACKUP=$BACKUP_DIR/phone.backup
DIR_OWNCLOUD=/var/www/vhosts/xanderio.de/owncloud.xanderio.de
DIR_OWNCLOUD_DATA=/var/www/vhosts/xanderio.de/owncloud.xanderio.de
DIR_OWNCLOUD_CONFIG=/var/www/vhosts/xanderio.de/owncloud.xanderio.de/config
DIR_ETC=/etc
DIR_PHONE=/home/backup_phone/Handy\ Backup
mkdir -p $BACKUP_DIR
mkdir -p $BACKUP_DIR_OWNCLOUD_DATA
mkdir -p $BACKUP_DIR_OWNCLOUD_CONFIG
mkdir -p $BACKUP_DIR_MYSQL_LATEST
mkdir -p $BACKUP_DIR_MYSQL
mkdir -p $BACKUP_DIR_ETC
mkdir -p $BACKUP_DIR_PHONE_BACKUP
####################
# Backup configuration
####################
echo "Backup Configuration..."
rdiff-backup $DIR_ETC $BACKUP_DIR_ETC
####################
# Backup owncloud-relevant data
####################
echo "Backup ownCloud..."
# Put owncloud into maintenance mode
cd $DIR_OWNCLOUD
php console.php maintenance:mode --on
# backup data files
cd $BACKUP_DIR
rdiff-backup $DIR_OWNCLOUD_DATA $BACKUP_DIR_OWNCLOUD_DATA
rdiff-backup $DIR_OWNCLOUD_CONFIG $BACKUP_DIR_OWNCLOUD_CONFIG
# backup database
/usr/bin/mysqldump --defaults-extra-file=$MYSQL_CONF --skip-extended-insert --skip-comments cloud > $BACKUP_DIR_MYSQL_LATEST/cloud.sql
# disable maintenance mode
cd $DIR_OWNCLOUD
php console.php maintenance:mode --off
####################
# Backup other mysql dbs
####################
echo "Dump MySQL/MariaDB..."
DBS="$(/usr/bin/mysql --defaults-extra-file=$MYSQL_CONF -Bse 'show databases' | /bin/grep -Ev $IGNORE)"
for DB in $DBS; do
/usr/bin/mysqldump --defaults-extra-file=$MYSQL_CONF --skip-extended-insert --skip-comments $DB > $BACKUP_DIR_MYSQL_LATEST/$DB.sql
done
####################
# mysql backup history + Backup Maintenance
####################
echo "Backup MySQL/MariaDB..."
# rdiff backup of mysql dumps (to have the versions)
rdiff-backup $BACKUP_DIR_MYSQL_LATEST $BACKUP_DIR_MYSQL
# remove mysql.latest, as we now have everything in mysql.backup
rm -rf $BACKUP_DIR_MYSQL_LATEST
####################
# Backup phone backup
####################
echo "Backup Phone"
rdiff-backup $DIR_PHONE $BACKUP_DIR_PHONE_BACKUP
####################
# Clean out old data
####################
echo "Clean Backup Directories..."
rdiff-backup --remove-older-than 50W $BACKUP_DIR_OWNCLOUD_DATA
rdiff-backup --remove-older-than 50W $BACKUP_DIR_OWNCLOUD_CONFIG
rdiff-backup --remove-older-than 50W $BACKUP_DIR_MYSQL
rdiff-backup --remove-older-than 50W $BACKUP_DIR_ETC
rdiff-backup --remove-older-than 50W $BACKUP_DIR_PHONE_BACKUP
echo "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment