Created
March 12, 2017 19:50
-
-
Save anryko/3ed65259b4a8f27b8fe77e57a1012226 to your computer and use it in GitHub Desktop.
Script to backup mysql databases on Debian based OS.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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