Skip to content

Instantly share code, notes, and snippets.

@anryko
Created March 12, 2017 19:50
Show Gist options
  • Save anryko/3ed65259b4a8f27b8fe77e57a1012226 to your computer and use it in GitHub Desktop.
Save anryko/3ed65259b4a8f27b8fe77e57a1012226 to your computer and use it in GitHub Desktop.
Script to backup mysql databases on Debian based OS.
#!/usr/bin/env bash
# by: anryko
# date: 2017.03.12
# description: Script to backup mysql databases on Debian based OS
set -e
set -o pipefail
umask 0077
trap cleanup ERR INT TERM EXIT
# global variables
SCRIPT_NAME=mysql_backup
BACKUP_DATE=$(date +%F-%H-%M-%S)
BACKUP_DIR=/backup/tmp
BACKUP_SUBDIR=mysql_$BACKUP_DATE
BACKUP_STORE_DIR=/backup/mysql/$BACKUP_DATE
MYSQL_USER=$(grep -m1 ^user /etc/mysql/debian.cnf | awk '{print $NF}')
MYSQL_PASS=$(grep -m1 ^pass /etc/mysql/debian.cnf | awk '{print $NF}')
MYSQL_AUTH="--user=$MYSQL_USER --password=$MYSQL_PASS"
MYSQL_DBS=$(/usr/bin/mysql $MYSQL_AUTH -e 'show databases;' | egrep -v "Database|---|information_schema|performance_schema" | fmt -999)
# helper functions
log() {
logger -i -t "$SCRIPT_NAME" -p "user.info" "$*"
echo "$*"
}
cleanup() {
log "cleanup started"
cd $BACKUP_DIR
rm -fr $BACKUP_SUBDIR
log "cleanup finished"
}
mysql_backup() {
# call with string of mysql db names to backup separated by ' '
[[ ! -d $BACKUP_DIR/$BACKUP_SUBDIR ]] && mkdir -p $BACKUP_DIR/$BACKUP_SUBDIR
mysql_db=$1
while shift; do
backup_file_path=$BACKUP_DIR/$BACKUP_SUBDIR/$mysql_db_${mysql_db}_$BACKUP_DATE.gz
log "starting backup of $mysql_db database to $backup_file_path"
/usr/bin/mysqldump $MYSQL_AUTH $mysql_db | gzip -9 > $backup_file_path
log "finished backup of $mysql_db database to $backup_file_path"
mysql_db=$1
done
[[ ! -d $BACKUP_STORE_DIR ]] && mkdir -p $BACKUP_STORE_DIR
log "moving backups to $BACKUP_STORE_DIR"
mv $BACKUP_DIR/$BACKUP_SUBDIR/* $BACKUP_STORE_DIR/
}
# main
log "starting mysql backup"
mysql_backup $MYSQL_DBS
log "mysql backup finished"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment