Skip to content

Instantly share code, notes, and snippets.

@hvanmegen
Created December 3, 2022 14:32
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 hvanmegen/6abfc853f576c015b6bf38064393326b to your computer and use it in GitHub Desktop.
Save hvanmegen/6abfc853f576c015b6bf38064393326b to your computer and use it in GitHub Desktop.
MySQL database backup script
#!/bin/bash
# MySQL database backup script
# settings:
SCRIPTNAME=$(basename $0)
USER="root"
OUTPUTDIR="/root/dbbackups/$(date +%Y-%m-%d)"
RETENTION_DAYS=7
COMPRESSION_ENABLED=1
COMPRESSION_COMMAND="/usr/bin/gzip"
COMPRESSION_EXTENSION=".gz"
MYSQLDUMP="/usr/bin/mysqldump"
MYSQL="/usr/bin/mysql"
# basic checks
if [ ! -x "$COMPRESSION_COMMAND" ]; then echo "No such compression command: ${COMPRESSION_COMMAND}"; exit; fi
if [ ! -x "$MYSQLDUMP" ]; then echo "No such mysql dumper: ${MYSQLDUMP}"; exit; fi
if [ ! -x "$MYSQL" ]; then echo "No such mysql client: ${MYSQL}"; exit; fi
# generate the directory
if [ ! -d "$OUTPUTDIR" ]; then mkdir -p $OUTPUTDIR; fi
# get a list of databases
databases=`$MYSQL --user=$USER -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|mysql|performance_schema|sys)"`
echo "- Backing up databases:"
# dump each database in turn
for db in $databases; do
filename="${OUTPUTDIR}/${db}_$(date +%Y-%m-%d_%H-%M-%S).sql"
if [ $COMPRESSION_ENABLED == 1 ]; then
filename=${filename}${COMPRESSION_EXTENSION}
fi
echo -e "database \033[0;32m${db}\033[0m as \033[0;32m${filename}\033[0m"
if [ $COMPRESSION_ENABLED == 1 ]; then
$MYSQLDUMP --force --opt --user=$USER --databases $db | $COMPRESSION_COMMAND > "${filename}"
else
$MYSQLDUMP --force --opt --user=$USER --databases $db > "${filename}"
fi
done
echo "- Cleaning up ${RETENTION_DAYS} days old backups:"
for i in `find /root/dbbackups/* -maxdepth 1 -type d -mtime +${RETENTION_DAYS} -print`; do
echo -e "deleting backups from \033[0;33m${i}\033[0m"
for j in `find $i -maxdepth 1 -type f -mtime +${RETENTION_DAYS} -print`; do
echo -e "\033[0;33m${j}\033[0m"
rm -vrf $j;
done
echo -e "deleting directory \033[0;33m${i}\033[0m"
rm -vrf $i;
done
echo "Backup & cleanup done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment