#!/bin/bash # TODO: Use a password file instead of passing password to script # Flags, for running on different devices # Cronjob needs to be on one line # e.g. 0 0 * * * /home/nathan/scripts/backup/backup_git.sh -d /srv/git -b /srv/dev-disk-by-uuid-d9f9e8fd-c473-450e-919e-c43200a6ac4a/gitBackup/ -r nathan@alphavps.aney.co.uk -R ~/backups/git/lilman/ while getopts s:d:b:r:R: flag do case "${flag}" in d) DATA=${OPTARG};; b) BACKUPDIR=${OPTARG};; r) REMOTE=${OPTARG};; R) REMOTEBACKUP=${OPTARG};; esac done SERVER=rn1 BACKUPDIR=/home/nathan/backups/$SERVER DATE=$(date +%Y%m%d) PASSWORD=password DBS="$(mysql -u admin -p$(echo $PASSWORD) -Bse 'show databases' | egrep -v '^Database$|hold$' | grep -v 'performance_schema\|information_schema\|mysql')" REMOTE=alphavps REMOTEBACKUP=~/backups/sql/$SERVER for DB in ${DBS[@]}; do mkdir -p $BACKUPDIR/$DB # Take the backup mysqldump -u admin -p$(echo $PASSWORD) $DB > $BACKUPDIR/$DB/${DB}_${DATE} # tarball the backup # Change the directory, to prevent backup to all path cd $BACKUPDIR tar -zcf $DB/${DB}_${DATE}.gz $DB/${DB}_${DATE} # remove untarballed rm $BACKUPDIR/$DB/${DB}_${DATE} ssh $REMOTE mkdir -p $REMOTEBACKUP/$DB scp $BACKUPDIR/$DB/${DB}_${DATE}.gz $REMOTE:$REMOTEBACKUP/$DB done