From aaceb570afba56ea1cfd55cef18db1aac61dc418 Mon Sep 17 00:00:00 2001 From: Lucilio Correia Date: Tue, 22 Oct 2024 14:54:11 -0300 Subject: [PATCH] fix: missing mariadb scripts --- scripts/backup-mariadb.sh | 94 ++++++++++++++++++++++++++++++++ scripts/install-mariadb-tools.sh | 8 +++ 2 files changed, 102 insertions(+) create mode 100644 scripts/backup-mariadb.sh create mode 100644 scripts/install-mariadb-tools.sh diff --git a/scripts/backup-mariadb.sh b/scripts/backup-mariadb.sh new file mode 100644 index 0000000..36f5966 --- /dev/null +++ b/scripts/backup-mariadb.sh @@ -0,0 +1,94 @@ +#! /bin/sh + +# +# MariaDB Backup +# Do backup of one or all databases of a given MariaDB server +# + +# +# List Databases +# + +# only argument is a database url +DB_URL="$1"; + +# load database values as environment variables while checking URL validity +# +# will populate variables +# - $DB_USERNAME +# - $DB_PASSWORD +# - $DB_HOST +# - $DB_PORT +# - $DB_NAME +# - any query var as a prefixed variable $db_arg_${name}=${value} +dburl-parser.sh ${DB_URL} > /tmp/ofelia.dotenv; +source /tmp/ofelia.dotenv; +rm /tmp/ofelia.dotenv; + +# set backup destination +if test -z "${BACKUP_DATABASES_PATH}"; then + echo "failed initializing backup -- \$BACKUP_DATABASES_PATH is empty"; + exit 1; +fi +## set subdirectory +backup_path="/$( + echo "/${BACKUP_DATABASES_PATH}/${db_arg_directory:-\/}/"\ + | sed 's/\/\{1,\}/\//g'\ + | sed 's/^\/\(.*\)\/$/\1/' + )/" + +## directory path +mkdir -p ${backup_path}; +## file name +backup_prefix="${db_arg_prefix:-backup-}"; +backup_extension="${db_arg_file_extension:-SQL}"; + +# set databases list +if test "${DB_NAME}" = '*'; then + ## build a list with every database name if * is informed + databases=$(mysql\ + --user=${DB_USERNAME}\ + --password=${DB_PASSWORD}\ + --host="${DB_HOST}"\ + --execute="SHOW DATABASES;"\ + --vertical\ + --column-names=false\ + | grep -ve ^\*\ + | xargs + ); +else + ## use the database informed or force using --all-databases param + databases="${DB_NAME:-::ALL_DATABASES::}"; +fi + +# proccess each database +for database_item in ${databases}; do + if test -z "${database_item}"; then + ## skip empty lines + continue; + elif test "${database_item}" = "::ALL_DATABASES::"; then + # backup everything in a single file if no database was set + database="--all-databases"; + filename_database="all-databases"; + else + # backup each database name to its own file + database="--databases ${database_item}"; + filename_database="${database_item}"; + fi + cat | xargs mariadb-dump << 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_path}\ + ${backup_prefix}\ + ${DB_HOST}\ + ${filename_database}\ + $(date +%s)\ + ${backup_extension} +) +${database} +HEREDOC +done \ No newline at end of file diff --git a/scripts/install-mariadb-tools.sh b/scripts/install-mariadb-tools.sh new file mode 100644 index 0000000..ea07ac5 --- /dev/null +++ b/scripts/install-mariadb-tools.sh @@ -0,0 +1,8 @@ +#! /bin/sh + +# +# MySQL install tools +# Install mysql and mysqldump to container +# + +apk update && apk add mariadb-client; \ No newline at end of file