69 lines
1.7 KiB
Bash
69 lines
1.7 KiB
Bash
#! /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 |