Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement