Skip to content

Instantly share code, notes, and snippets.

@smileart
Last active November 2, 2015 16:35
Show Gist options
  • Select an option

  • Save smileart/c633d63473095b5dc55e to your computer and use it in GitHub Desktop.

Select an option

Save smileart/c633d63473095b5dc55e to your computer and use it in GitHub Desktop.
MySQL DB backup script
#! /usr/bin/env bash
PRESERVE_FILES_COUNT=3
ARCHIVE_EXTENSION='.sql.bz2'
if [ ! -z $1 ] && [ ! -z $2 ] && [ ! -z $3 ] && [ ! -z $4 ]; then
backup_dir=$1
db_user=$2
db_pass=$3
db_name=$4
archive_name="$(date +\%m\%d\%Y-\%H\%M\%S)_$db_name.sql.bz2"
function count_files_by_type() {
full_dir_path="$( dirname "$1" )/$( basename $1 )"
file_extension=$2
if [ -d $full_dir_path ] && [ ! -z $file_extension ]; then
ls $full_dir_path | grep "$file_extension" | wc -l | tr -s ' '
fi
}
set -o pipefail
cd $backup_dir && mysqldump --single-transaction -u$db_user -p$db_pass $db_name | bzip2 -9 -c > ./$archive_name
#cd $backup_dir && echo 'some SQL data' | bzip2 -9 -c > ./$archive_name # test backup (without MySQL)
result=$?
bz2_files_count=$( count_files_by_type $backup_dir $ARCHIVE_EXTENSION )
if [ "$bz2_files_count" -gt $PRESERVE_FILES_COUNT ] && [ $result -eq 0 ]; then
echo "$bz2_files_count is grater then $PRESERVE_FILES_COUNT... I'm going to delete excess files!"
rm -f $backup_dir/$(ls -tr1 $backup_dir|grep $ARCHIVE_EXTENSION|head -1) > /dev/null 2>&1
fi
else
echo "Usage: ~/db_backup.sh ~/backup/path db_user db_pass db_name"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment