Skip to content

Instantly share code, notes, and snippets.

@rojenzaman
Last active May 31, 2021 15:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rojenzaman/bd4bcff8e23039a691d7005a2038e77f to your computer and use it in GitHub Desktop.
Save rojenzaman/bd4bcff8e23039a691d7005a2038e77f to your computer and use it in GitHub Desktop.
automysqlbackup DOCKER
#!/bin/bash
# CRONTAB:
# @daily /path/to/automysqlbackup.sh hour
# @daily /path/to/automysqlbackup.sh day
# @weekly /path/to/automysqlbackup.sh week
# @monthly /path/to/automysqlbackup.sh month
# MAIL:
# apt install mailutils postfix
[[ -t 1 ]] || set -x
SCRIPT=$(realpath $0)
cd "$(dirname "${BASH_SOURCE[0]}")"
. ENV.conf
hour() { date +hour.%d-%m-%Y_%Hh%Mm%Ss.%A ; }
day() { date +day.%d-%m-%Y_%Hh%Mm.%A ; }
week() { date +week.%U.%d-%m-%Y_%Hh%Mm ; }
month() { date +month.%d-%m-%Y_%Hh%Mm.%B ; }
function exec_hour() {
yesterday=$(date --date="yesterday" +%d-%m-%Y)
ls hour*$yesterday* &>/dev/null && rm hour*$yesterday* &> /dev/null
return 0
}
function exec_day() { return 0 ; }
function exec_week() { return 0 ; }
function exec_month() { return 0 ; }
function cronie() {
echo -e "#!/bin/bash\n$SCRIPT hour" > /etc/cron.hourly/automysqlbackup 2>/dev/null && chmod 750 /etc/cron.hourly/automysqlbackup &> /dev/null
echo -e "#!/bin/bash\n$SCRIPT day" > /etc/cron.daily/automysqlbackup 2>/dev/null && chmod 750 /etc/cron.daily/automysqlbackup &> /dev/null
echo -e "#!/bin/bash\n$SCRIPT week" > /etc/cron.weekly/automysqlbackup 2>/dev/null && chmod 750 /etc/cron.weekly/automysqlbackup &> /dev/null
echo -e "#!/bin/bash\n$SCRIPT month" > /etc/cron.monthly/automysqlbackup 2>/dev/null && chmod 750 /etc/cron.monthly/automysqlbackup &> /dev/null
}
function main() {
x=0
COMMAND="$1"
function mysqldump() {
cd $i
echo -e "\e[91m$x:\e[0m\e[92m`pwd`\e[0m"
STAMP=$($COMMAND)
exec_$COMMAND
docker-compose exec -T db mysqldump --user="$DATABASE_USER" --password="$PASS" "$DATABASE_NAME" --result-file="/mysql-backup/$STAMP.sql" --no-tablespaces 2> /dev/null
gzip -f9 mysql-backup/$STAMP.sql 2> /dev/null
echo ""
}
for i in */; do
x=$((x+1))
( mysqldump $1 )
done
}
if [ "$#" -lt 1 ]; then
echo "./`basename $0` hour | day | week | month | crontab";
exit 1;
fi
case $1 in
hour|--hour) main hour ;;
day|--day) main day ;;
week|--week) main week ;;
month|--month) main month ;;
crontab|--crontab) cronie ;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment