From 697aafe6b441d26eba9a63ff43ec777d704ad435 Mon Sep 17 00:00:00 2001
From: Patrick Ditzel <patrick@central-computer.de>
Date: Mon, 18 Dec 2017 12:46:52 +0000
Subject: [PATCH] Split postgres into postgres-local an d postgres remote. Get mariadb to run. Modified the finding of configurationfiles ind dbb.
---
dbb-modules/postgresql | 69 +---------------
dbb | 36 ++++----
dbb-modules/mariadb | 10 +-
dbb-modules/postgresql-localhost | 72 ++++++++++++++++++
config/postgresql-localhost.cfg | 15 +++
config/postgresql.cfg | 17 ---
6 files changed, 119 insertions(+), 100 deletions(-)
diff --git a/config/postgresql-localhost.cfg b/config/postgresql-localhost.cfg
new file mode 100644
index 0000000..fdd3e30
--- /dev/null
+++ b/config/postgresql-localhost.cfg
@@ -0,0 +1,15 @@
+################################################################################
+# Backup Postgres @ localhost as user postres (Debian)
+
+POSTGRES_BACKUP_LOCAL=TRUE
+
+# Should every database backuped in a single file?
+# Works together with POSTGRES_BACKUP_LOCAL_DUMP_ALL
+
+POSTGRES_BACKUP_LOCAL_SINGLE=TRUE
+
+# Should all databases backuped in one large file?
+# Works together with POSTGRES_BACKUP_LOCAL_SINGLE
+
+POSTGRES_BACKUP_LOCAL_DUMP_ALL=TRUE
+
diff --git a/config/postgresql.cfg b/config/postgresql.cfg
index c23b720..16b1517 100644
--- a/config/postgresql.cfg
+++ b/config/postgresql.cfg
@@ -1,19 +1,6 @@
################################################################################
-# Backup Postgres @ localhost as user postres (Debian)
-
-POSTGRES_BACKUP_LOCAL=TRUE
-
-# Should every database backuped in a single file?
-# Works together with POSTGRES_BACKUP_LOCAL_DUMP_ALL
-
-POSTGRES_BACKUP_LOCAL_SINGLE=TRUE
-
-# Should all databases backuped in one large file?
-# Works together with POSTGRES_BACKUP_LOCAL_SINGLE
-
-POSTGRES_BACKUP_LOCAL_DUMP_ALL=TRUE
-
-################################################################################
## Enable backup of remote postgres databases specified in ~/.pgpass
POSTGRES_BACKUP_REMOTE=TRUE
+
+
diff --git a/dbb b/dbb
index 0c24fe2..792bc2a 100755
--- a/dbb
+++ b/dbb
@@ -31,11 +31,11 @@
# If true then read it
source $BACKUPCFG
if [ -d $BACKUPCFG.d ]; then
- if [ ! "$(find $BACKUPCFG.d/*.cfg | cut -d "." -f1)" ]; then
+ if [ ! "$(find $BACKUPCFG.d/*.cfg)" ]; then
echo "Configurationdirectory for modules exist but it is empty" | /usr/bin/logger -s -i -t databasebackup
else
echo "Read module configuration" | /usr/bin/logger -s -i -t databasebackup
- for MODULECFG in $(find $BACKUPCFG.d/*.cfg | cut -d "/" -f4 | cut -d "." -f1); do source $BACKUPCFG.d/$MODULECFG.cfg; done
+ for MODULECFG in $(find $BACKUPCFG.d/*.cfg); do source "$BACKUPCFG".d/"${MODULECFG##*/}"; done
fi
else
echo "Configurationdirectory does not exists, can't load any configurationfile" | /usr/bin/logger -s -i -t databasebackup
@@ -52,11 +52,11 @@
while read -r configline; do
echo "$configline" | grep -v '^$' | grep -v '^#' | /usr/bin/logger -s -i -t databasebackup
done <<< "$(cat $BACKUPCFG)"
- for MODCFGLINE in $(find $BACKUPCFG.d/*.cfg | cut -d "." -f1); do
+ for MODCFGLINE in $(find $BACKUPCFG.d/*.cfg); do
echo "Debuginfo for $MODCFGLINE" | /usr/bin/logger -s -i -t databasebackup
while read -r modconfigline; do
echo "$modconfigline" | grep -v '^$' | grep -v '^#' | /usr/bin/logger -s -i -t databasebackup
- done <<< "$(cat $BACKUPCFG.d/$MODCFGLINE.cfg)"
+ done <<< "$(cat "$MODCFGLINE")"
done
echo "################################################################################" | /usr/bin/logger -s -i -t databasebackup
fi
@@ -99,11 +99,11 @@
if [ ! "$(ls -A $BACKUPCFG.d)" ] && [ ! "$(ls -A $INSTALLATION_PATH_PREFIX/lib/dbb-modules)" ]; then
debug "Configurationdirectory or directory for modules exist but it is empty"
else
- for MODULE in $(find $BACKUPCFG.d/*.cfg | cut -d "/" -f4 | cut -d "." -f1); do
- source $INSTALLATION_PATH_PREFIX/lib/dbb-modules/$MODULE
- debug "Load module: $INSTALLATION_PATH_PREFIX/lib/dbb-modules/$MODULE"
+ for MODULE in $(find $BACKUPCFG.d/*.cfg); do
+ source $INSTALLATION_PATH_PREFIX/lib/dbb-modules/"$(echo "${MODULE##*/}" | cut -d "." -f1)"
+ debug "Load module: $INSTALLATION_PATH_PREFIX/lib/dbb-modules/$(echo "${MODULE##*/}" | cut -d "." -f1)"
# Check the dependenncies defined in the modulefunction -> should be defined in configfiles
- check-$MODULE-deps
+ check-"$(echo "${MODULE##*/}" | cut -d "." -f1)"-deps
done
fi
else
@@ -159,23 +159,23 @@
debug "REMOVE_NUMBER: $REMOVE_NUMBER"
debug "FILE_PREFIX_NAME_TO_REMOVE: $BFH_FILE_PREFIX_NAME_TO_REMOVE-$BFH_FILE"
# Check if there is an backupfile from the current day
- if [ -f "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"-"$BFH_FILE" ]; then
+ if [ -f "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"_"$BFH_FILE" ]; then
# If yes append miniutes and seconds to the date-profix of the filename
- debug "File $BFH_BACKUPDIR_DIR/$BACKUP_DAY-$BFH_FILE already exists. Rename the new one."
- DATE_TIME_SUFFIX=$(date +%H%M%S)
+ debug "File $BFH_BACKUPDIR_DIR/$BACKUP_DAY_$BFH_FILE already exists. Rename the new one."
+ DATE_TIME_SUFFIX=$(date +%H:%M:%S)
# ... and move it into the targetdir
- mv "$BFH_TMP_DIR"/"$BFH_FILE" "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"-"$DATE_TIME_SUFFIX"-"$BFH_FILE"
+ mv "$BFH_TMP_DIR"/"$BFH_FILE" "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"_"$DATE_TIME_SUFFIX"_"$BFH_FILE"
else
# If there is no backupfile of the current day move it to the backupfolder
- mv "$BFH_TMP_DIR"/"$BFH_FILE" "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"-"$BFH_FILE"
+ mv "$BFH_TMP_DIR"/"$BFH_FILE" "$BFH_BACKUPDIR_DIR"/"$BACKUP_DAY"_"$BFH_FILE"
fi
# Check if there are files older then the days to keep set in the config
if [ -f "$BFH_BACKUPDIR_DIR"/"$BFH_FILE_PREFIX_NAME_TO_REMOVE"-"$BFH_FILE" ]; then
# if yes remove it
- rm "$BFH_BACKUPDIR_DIR"/"$BFH_FILE_PREFIX_NAME_TO_REMOVE"-"$BFH_FILE"
+ rm "$BFH_BACKUPDIR_DIR"/"$BFH_FILE_PREFIX_NAME_TO_REMOVE"_"$BFH_FILE"
# Also remove the files with the extended prefix in the name
# If there is ab file with the extende prefix then there has to be a file with tne normal prefix
- rm "$BFH_BACKUPDIR_DIR"/"$BFH_FILE_PREFIX_NAME_TO_REMOVE"?????-"$BFH_FILE"
+ rm "$BFH_BACKUPDIR_DIR"/"$BFH_FILE_PREFIX_NAME_TO_REMOVE"_????????_"$BFH_FILE"
else
# If no file exists do nothing but some debuginfo
debug "File $BFH_BACKUPDIR_DIR/$BFH_FILE_PREFIX_NAME_TO_REMOVE-$BFH_FILE does not exists, so can not remove it."
@@ -234,9 +234,9 @@
debug "Load dbb-modules"
load_dbbmodules
# Run modul-main-functions
- for MODULEMAIN in $(find $BACKUPCFG.d/*.cfg | cut -d "/" -f4 | cut -d "." -f1); do
- debug "run $MODULEMAIN-main - function of module $MODULEMAIN"
- $MODULEMAIN-main
+ for MODULEMAIN in $(find $BACKUPCFG.d/*.cfg); do
+ debug "run $MODULEMAIN-main - function of module '$(echo "${MODULEMAIN##*/}" | cut -d "." -f1)'"
+ "$(echo "${MODULEMAIN##*/}" | cut -d "." -f1)"-main
done
# The final action: remove the dumps
rm -rf "$TMP_DIR"
diff --git a/dbb-modules/mariadb b/dbb-modules/mariadb
index e47e7c7..b3c58c9 100644
--- a/dbb-modules/mariadb
+++ b/dbb-modules/mariadb
@@ -21,15 +21,15 @@
}
function mariadb_remote {
- MARIADBHOSTNAME=$(cat ~/.my.cnf-$DATABASE | grep host | cut -d "=" -f2)
- for MARIADB in $(ls .my.cnf-* | cut -d "-" -f2)
- do
- /usr/bin/mysqldump --defaults-file="~/.my.cnf-$MARIADB" --skip-dump-date $MARIADB > $TMP_DIR/$MARIADBHOSTNAME_$MARIADB.mysql
+ for MARIADB in $(ls ~/.my.cnf-* | cut -d "-" -f2); do
+ debug "Function mariadb_remote: Doing Database: $MARIADB"
+ MARIADBHOSTNAME=$(cat ~/.my.cnf-"$MARIADB" | grep host | cut -d "=" -f2)
+ /usr/bin/mysqldump --defaults-file=~/.my.cnf-"$MARIADB" --skip-dump-date "$MARIADB" > "$TMP_DIR"/"$MARIADBHOSTNAME"_"$MARIADB".mysql
debug "Diff MySQLDump $MYSQLDB"
diff "$TMP_DIR"/"$MARIADBHOSTNAME"_"$MARIADB".mysql "$BACKUP_DIR"/"$MARIADBHOSTNAME"_"$MARIADB".mysql > /dev/null 2>&1
if [ $? -ne 0 ]; then
debug "Differences found -> moving to BACKUP_DIR"
- mv "$TMP_DIR"/"$MARIADBHOSTNAME"_"$MARIADB".mysql "$BACKUP_DIR"/"$MARIADBHOSTNAME"_"$MARIADB".mysql
+ backup_file_handler "$TMP_DIR" "$BACKUP_DIR" "$MARIADBHOSTNAME"_"$MARIADB".mysql
else
debug "No differences found in Database $MARIADB"
fi
diff --git a/dbb-modules/postgresql b/dbb-modules/postgresql
index f50c10a..502567c 100644
--- a/dbb-modules/postgresql
+++ b/dbb-modules/postgresql
@@ -6,10 +6,6 @@
if [ ! -e /usr/bin/pg_dump ]; then
debug "It seems that you dont have psql installed. You may have problems to backup remote databases"
fi
- numberRegex='^[0-9]+$'
- if ! [[ $(id -u postgres 2>&1) =~ $numberRegex ]] ; then
- debug "It seems that you dont have the user postgres on your computer. You may have problems to backup local postgres databases"
- fi
if [ -r ~/.pgpass ]; then
debug "function check-postgresql-deps: ~/.pgpass exists, doing reomte backup."
else
@@ -18,55 +14,6 @@
fi
}
-# PostgreSQL local
-
-function pg_local_all {
- # Debugoutput id DEBUG is enabled
- debug "Dump all from Postgres local"
- # Dump all databases in one file as user postgres (Debian)
- sudo -H -i -u postgres pg_dumpall > "$TMP_DIR"/local_dumpall.pgsql
- debug "Diff alldumps from Postgres local"
- # Check if there are differences between the actual dump and the last dump
- backup_file_handler "$TMP_DIR $BACKUP_DIR" local_dumpall.pgsql
-}
-
-function pg_local_single {
- # Get a list with all databases on localhost. Do it as user postgres (Debian)
- # parallelize the following
- for DB in $(sudo -H -i -u postgres /usr/bin/psql -At -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn ORDER BY datname;" postgres)
- do
- debug "Dumping local database $DB"
- # Dump each database in a single file
- sudo -H -i -u postgres /usr/bin/pg_dump -Fp "$DB" > "$TMP_DIR"/local_"$DB".pgsql
- backup_file_handler "$TMP_DIR" "$BACKUP_DIR" local_"$DB".pgsql
- echo ""
- done
-}
-
-# Do the local backupjobs
-
-function run_local_pg_backups {
- # Test if the current backupuser has access via sudo to postgres
- # This part has to be improved!
- sudo -l -U "$BACKUPUSER" | grep postgres
- if [ $? -eq 0 ];then
- # If the user has access vi sudo to postgres and a full dump is configured, do it.
- if [ "$POSTGRES_BACKUP_LOCAL_DUMP_ALL" == "TRUE" ]; then
- pg_local_all
- fi
- # If the user has access vi sudo to postgres and dumps for each database is configured , do it.
- if [ "$POSTGRES_BACKUP_LOCAL_SINGLE" == "TRUE" ]; then
- pg_local_single
- fi
- else
- # If the user is not permitted to acces the postgresdatabases vi sudo throw an errormessage
- echo "" | $LOGGER
- echo "The backupuser does not the permission to act as user postgres" | $LOGGER
- echo "Please add the following line to your /etc/sudoers:" | $LOGGER
- echo "backupuser ALL=(postgres) NOPASSWD:/usr/bin/psql,/usr/bin/pg_dump,/usr/bin/pg_dumpall" | $LOGGER
- echo "" | $LOGGER
- fi
-}
################################################################################
@@ -96,8 +43,8 @@
# I don't know if the following statement really effect to pg_dump :-(
export PGSSLMODE=require
# Dump the databases which are defined in the params
- /usr/bin/pg_dump -U "$TRGTBDUSER" -h "$TRGTHOST" -p "$TRGTPORT" "$TRGTDB" > "$TMP_DIR"/"$TRGTHOST"-"$TRGTDB".pgql
- backup_file_handler "$TMP_DIR" "$BACKUP_DIR" "$TRGTHOST"-"$TRGTDB".pgql
+ /usr/bin/pg_dump -U "$TRGTBDUSER" -h "$TRGTHOST" -p "$TRGTPORT" "$TRGTDB" > "$TMP_DIR"/"$TRGTHOST"_"$TRGTDB".pgql
+ backup_file_handler "$TMP_DIR" "$BACKUP_DIR" "$TRGTHOST"_"$TRGTDB".pgql
else
# If no encrypted connection to the postgres-server can be established throw an errormessage
echo "" | $LOGGER
@@ -118,10 +65,11 @@
# For each entry do the backup
debug "run dump with params $LINE"
# CAUTION: No doublequotes in the following line. The var $LINE has to be splittet!
- dump_remote_pgdb $LINE
- # To get the params for the function the .pgpass-file is striped from the comments,
- # the ":" are replaces against whitespaces and only the first four coloums are used
- # so we give "host port database user" to the function
+ # DO NOT DOUBLEQUOTE $LINE
+ dump_remote_pgdb $LINE
+ # To get the params for the function the .pgpass-file is striped from the comments,
+ # the ":" are replaces against whitespaces and only the first four coloums are used
+ # so we give "host port database user" to the function
done <<< "$(cat ~/.pgpass | grep -v '#' | tr ":" " " | cut -d " " -f1,2,3,4)"
else
# If the ~/.pgpass-file is missig, throw an errormessage
@@ -135,9 +83,6 @@
}
function postgresql-main {
- if [ "$POSTGRES_BACKUP_LOCAL" = "TRUE" ]; then
- run_local_pg_backups
- fi
if [ "$POSTGRES_BACKUP_REMOTE" = "TRUE" ]; then
run_remote_pg_backups
fi
diff --git a/dbb-modules/postgresql-localhost b/dbb-modules/postgresql-localhost
new file mode 100644
index 0000000..9747832
--- /dev/null
+++ b/dbb-modules/postgresql-localhost
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+# dependencies
+
+function check-postgresql-localhost-deps {
+ if [ ! -e /usr/bin/pg_dump ]; then
+ debug "It seems that you dont have psql installed. You may have problems to backup remote databases"
+ fi
+ numberRegex='^[0-9]+$'
+ if ! [[ $(id -u postgres 2>&1) =~ $numberRegex ]] ; then
+ debug "It seems that you dont have the user postgres on your computer. You may have problems to backup local postgres databases"
+ fi
+}
+
+# PostgreSQL local
+
+function pg_local_all {
+ # Debugoutput id DEBUG is enabled
+ debug "Dump all from Postgres local"
+ # Dump all databases in one file as user postgres (Debian)
+ sudo -H -u postgres pg_dumpall > "$TMP_DIR"/local_dumpall.pgsql
+ debug "Diff alldumps from Postgres local"
+ # Check if there are differences between the actual dump and the last dump
+ backup_file_handler "$TMP_DIR $BACKUP_DIR" local_dumpall.pgsql
+}
+
+function pg_local_single {
+ # Get a list with all databases on localhost. Do it as user postgres (Debian)
+ # parallelize the following
+ for DB in $(sudo -H -u postgres /usr/bin/psql -At -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn ORDER BY datname;" postgres)
+ do
+ debug "Dumping local database $DB"
+ # Dump each database in a single file
+ sudo -H -u postgres /usr/bin/pg_dump -Fp "$DB" > "$TMP_DIR"/local_"$DB".pgsql
+ backup_file_handler "$TMP_DIR" "$BACKUP_DIR" local_"$DB".pgsql
+ echo ""
+ done
+}
+
+# Do the local backupjobs
+
+function run_local_pg_backups {
+ # Test if the current backupuser has access via sudo to postgres
+ # This part has to be improved!
+ sudo -l -U "$BACKUPUSER" | grep postgres
+ if [ $? -eq 0 ];then
+ # If the user has access vi sudo to postgres and a full dump is configured, do it.
+ if [ "$POSTGRES_BACKUP_LOCAL_DUMP_ALL" == "TRUE" ]; then
+ pg_local_all
+ fi
+ # If the user has access vi sudo to postgres and dumps for each database is configured , do it.
+ if [ "$POSTGRES_BACKUP_LOCAL_SINGLE" == "TRUE" ]; then
+ pg_local_single
+ fi
+ else
+ # If the user is not permitted to acces the postgresdatabases vi sudo throw an errormessage
+ echo "" | $LOGGER
+ echo "The backupuser does not the permission to act as user postgres" | $LOGGER
+ echo "Please add the following line to your /etc/sudoers:" | $LOGGER
+ echo "backupuser ALL=(postgres) NOPASSWD:/usr/bin/psql,/usr/bin/pg_dump,/usr/bin/pg_dumpall" | $LOGGER
+ echo "" | $LOGGER
+ fi
+}
+
+################################################################################
+
+
+function postgresql-localhost-main {
+ if [ "$POSTGRES_BACKUP_LOCAL" = "TRUE" ]; then
+ run_local_pg_backups
+ fi
+}
--
Gitblit v1.10.0