#!/bin/bash DATABASE_USER= DATABASE_PASS= DATABASE_HOST=localhost DATABASE_PORT=3306 MYSQL=/usr/bin/mysql MYSQLDUMP=/usr/bin/mysqldump COMPRESS=/usr/bin/xz RSYNC=/usr/bin/rsync BACKUP_DIR=/var/lib/mysql-backups BACKUP_AGE=90 DATABASE_LIST="$(${MYSQL} -u ${DATABASE_USER} -h ${DATABASE_HOST} -P ${DATABASE_PORT} -p${DATABASE_PASS} -Bse "show databases;" | grep -v information_schema)" case $(basename ${COMPRESS}) in xz) EXT=xz ;; lzma) EXT=lzma ;; bzip2) EXT=bz2 ;; gzip) EXT=gz ;; esac echo "===> MySQL database backups started: $(date)" echo for DB in ${DATABASE_LIST} do echo -n "===> Backing up database '${DB}'... " if [ ! -d ${BACKUP_DIR}/${DB} ]; then mkdir -p ${BACKUP_DIR}/${DB} fi ${MYSQLDUMP} -u ${DATABASE_USER} -h ${DATABASE_HOST} -P ${DATABASE_PORT} -p${DATABASE_PASS} ${DB} | ${COMPRESS} > ${BACKUP_DIR}/${DB}/${DB}-$(date +"%Y%m%d-%H%M").${EXT} if [ $? -eq 0 ]; then echo "succeeded." else echo "failed!" fi done echo echo "===> MySQL database backups finished: $(date)" echo echo "===> Removing backups older than ${BACKUP_AGE} days..." find ${BACKUP_DIR} -type f -mtime +${BACKUP_AGE} -print -exec rm '{}' \; echo "Done."