#! /bin/sh # # MySQL Backup # Do backup of one or all databases of a given MySQL server # # # List Databases # # only argument is a database url DB_URL="$1"; # load database values as environment variables while checking URL validity dburl-parser.sh ${DB_URL} > /tmp/ofelia.dotenv; source /tmp/ofelia.dotenv; rm /tmp/ofelia.dotenv; # set backup destination ## directory path BACKUP_DATABASES_PATH=${BACKUP_DATABASES_PATH:-/var/data/backup-databases}; mkdir -p ${BACKUP_DATABASES_PATH}; ## file name BACKUP_DATABASES_PREFIX="backup-"; BACKUP_DATABASES_SUFFIX="SQL"; if test "${DB_NAME}" = '*'; then databases=$(mysql\ --user=${DB_USERNAME}\ --password=${DB_PASSWORD}\ --host="${DB_HOST}"\ --execute="SHOW DATABASES;"\ --vertical\ --column-names=false\ | grep -ve ^\*\ | xargs ); else databases="${DB_NAME:-:ALL_DATABASES:}"; fi for database_item in ${databases}; do if test -z "${database_item}"; then continue; elif test "${database_item}" = ":ALL_DATABASES:"; then database="--all-databases"; filename_database="all-databases"; else database="--databases ${database_item}"; filename_database="${database_item}"; fi cat | xargs mysqldump << HEREDOC $(test -n ${DB_USERNAME} && echo "--user=${DB_USERNAME}") $(test -n ${DB_PASSWORD} && echo "--password=${DB_PASSWORD}") $(test -n ${DB_HOST} && echo "--host=${DB_HOST}") $(test -n ${DB_PORT} && echo "--port=${DB_PORT}") --result-file=$( printf '%s/%s%s-%s_%s.%s'\ ${BACKUP_DATABASES_PATH}\ ${BACKUP_DATABASES_PREFIX}\ ${DB_HOST}\ ${filename_database}\ $(date +%s)\ ${BACKUP_DATABASES_SUFFIX} ) ${database} HEREDOC done