Skip to content

Instantly share code, notes, and snippets.

@damms005
Last active August 25, 2020 19:05
Show Gist options
  • Save damms005/693c4b30aa6bffae03a6849770353e71 to your computer and use it in GitHub Desktop.
Save damms005/693c4b30aa6bffae03a6849770353e71 to your computer and use it in GitHub Desktop.
Bash script to backup MySQL db using mysqldump utility
#!/bin/bash
# original source Lyman Lai
# http://002.yaha.me/item/22728a58-c967-46d5-93eb-2649d684a9aa/
# edited by damms005 on 2020-08-25
STORE_FOLDER="/backups-custom-moodle-database"
TODAY=$(date +"%Y-%m-%d")
DAILY_DELETE_NAME="daily-"`date +"%Y-%m-%d" --date '3 days ago'`
WEEKLY_DELETE_NAME="weekly-"`date +"%Y-%m-%d" --date '2 weeks ago'`
MONTHLY_DELETE_NAME="monthly-"`date +"%Y-%m-%d" --date '1 months ago'`
databases=($(/usr/bin/mysql -Bse "show databases" | grep -i -v "_schema" | grep -i -v "sys" | grep -i -v "mysql"))
function do_backups() {
# Get db name or "all"
backup_db=$1
# run dump
if [ "$backup_db" == "all" ]; then
BACKUP_PATH=$STORE_FOLDER/all
[[ ! -d "$BACKUP_PATH" ]] && mkdir -p "$BACKUP_PATH"
echo " Creating $BACKUP_PATH/daily-$TODAY.sql.gz"
/usr/bin/mysqldump --all-databases | gzip -9 > $BACKUP_PATH/daily-$TODAY.sql.gz
else
backup_db=$1
BACKUP_PATH=$STORE_FOLDER/$backup_db
[[ ! -d "$BACKUP_PATH" ]] && mkdir -p "$BACKUP_PATH"
echo " Creating $BACKUP_PATH/daily-$TODAY.sql.gz"
/usr/bin/mysqldump --verbose $backup_db | gzip -9 > $BACKUP_PATH/daily-$TODAY.sql.gz
fi
# delete old backups
if [ -f "$BACKUP_PATH/$DAILY_DELETE_NAME.sql.gz" ]; then
echo " Deleting $BACKUP_PATH/$DAILY_DELETE_NAME.sql.gz"
rm -rf $BACKUP_PATH/$DAILY_DELETE_NAME.sql.gz
fi
if [ -f "$BACKUP_PATH/$WEEKLY_DELETE_NAME.sql.gz" ]; then
echo " Deleting $BACKUP_PATH/$WEEKLY_DELETE_NAME.sql.gz"
rm -rf $BACKUP_PATH/$WEEKLY_DELETE_NAME.sql.gz
fi
if [ -f "$BACKUP_PATH/$MONTHLY_DELETE_NAME.sql.gz" ]; then
echo " Deleting $BACKUP_PATH/$MONTHLY_DELETE_NAME.sql.gz"
rm -rf $BACKUP_PATH/$MONTHLY_DELETE_NAME.sql.gz
fi
# make weekly
if [ `date +%u` -eq 7 ];then
cp $BACKUP_PATH/daily-$TODAY.sql.gz $BACKUP_PATH/weekly-$TODAY.sql.gz
fi
# make monthly
if [ `date +%d` -eq 25 ];then
cp $BACKUP_PATH/daily-$TODAY.sql.gz $BACKUP_PATH/monthly-$TODAY.sql.gz
fi
}
if [ -z $1 ]; then
echo
echo "Usage: $0 <all | database_name>"
echo
else
echo "*** MySQL Backups"
echo "To be deleted if present:"
echo " $DAILY_DELETE_NAME"
echo " $WEEKLY_DELETE_NAME"
echo " $MONTHLY_DELETE_NAME"
do_backups $1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment