diff --git a/src/lib/handlers/sources/mysqldump.sh b/src/lib/handlers/sources/mysqldump.sh new file mode 100644 index 0000000..62eb183 --- /dev/null +++ b/src/lib/handlers/sources/mysqldump.sh @@ -0,0 +1,108 @@ +#!/usr/bin/env bash + +# mysqldump.sh - create SQL dump of MariaDB/MySQL database. +# Copyright (c) 2022 ge +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +handler::mysqldump() { + # Create SQL-dump at location __main_target_path using mysqldump(1) + # Compression is optional. + # Handle 'mysql' URI scheme. + # + # Usage: handler::mysqldump URI + + log "Run handler handler::mysqldump()" + + local uri + local dst_path + local compr_util + local compr_cmd + local file_ext + + uri="$1" + dst_path="$__main_target_path" + + parse_uri "$uri" + + [ -z "$port" ] && port=3306 # Set default MySQL port. + + [ -n "$__verbose" ] && echo "Dumping database '${path##*/}'"\ + "owned by ${username}@${hostname} ..." | log -p + + # Select compression utility and set filename extension. + if [ -n "$compression" ]; then + set_compression "$compression" + file_ext=".sql${file_ext}" + else + compr_util= + file_ext='.sql' + fi + + dump_name="${dst_path}/$(gen_backup_name "$file_ext")" + + [ -n "$__verbose" ] && echo "Dump: $dump_name" + log "Dump: $dump_name" + + if [ -n "$compr_util" ]; then + compr_cmd="$compr_util -c" # e.g. gzip -c + else + compr_cmd="cat" + fi + + # NOTE! mysqldump_opts and compr_cmd variables must be unquoted! + try mysqldump $mysqldump_opts \ + --host="$hostname" \ + --port="$port" \ + "${path##*/}" \ + --user="$username" \ + --password="$password" | + $compr_cmd > "$dump_name" + + if [ ! -s "$dump_name" ]; then + err -e "Something went wrong: Dump size is 0 bytes. Removing $dump_name" + rm "$dump_name" + fi +} + +# POSTGRESQL vvv + +bk_dump_postgresql() { + # Do PostgreSQL dump. + + bk_log "Dumping database '${path##*/}' owned by ${user}@${host} (PostgreSQL) ..." + + dump_name="$entry_local"/"$(bk_get_name "$db_name" .psql.gz)" + [ "$port" ] || port=5432 # Set default PostgreSQL port. + export PGPASSWORD="$password" + + pg_dump \ + --host="$host" \ + --port="$port" \ + --dbname="${path##*/}" \ + --username="$user" \ + --no-password | gzip -c > "$dump_name" |& bk_log + + unset PGPASSWORD + + if [ -s "$dump_name" ]; then + bk_log "Dumping database '${path##*/}' owned by ${user}@${host} (PostgreSQL) [Done]" + bk_log "Dump saved as: $dump_name" + bk_upload_file "$dump_name" + + else + rm "$dump_name" + bk_err "Something went wrong. Dump size is 0 bytes. Removing $dump_name" + fi +} diff --git a/src/lib/handlers/tar.sh b/src/lib/handlers/sources/tar.sh similarity index 100% rename from src/lib/handlers/tar.sh rename to src/lib/handlers/sources/tar.sh diff --git a/src/lib/handlers/cp.sh b/src/lib/handlers/targets/cp.sh similarity index 100% rename from src/lib/handlers/cp.sh rename to src/lib/handlers/targets/cp.sh diff --git a/src/lib/lib.sh b/src/lib/lib.sh index b81419c..33772d1 100644 --- a/src/lib/lib.sh +++ b/src/lib/lib.sh @@ -22,5 +22,6 @@ LIBRARY="${LIBRARY:-./lib}" . "$LIBRARY/backup.sh" . "$LIBRARY/source.sh" . "$LIBRARY/uri.sh" -. "$LIBRARY/handlers/tar.sh" -. "$LIBRARY/handlers/cp.sh" +. "$LIBRARY/handlers/sources/tar.sh" +. "$LIBRARY/handlers/sources/mysqldump.sh" +. "$LIBRARY/handlers/targets/cp.sh"