Skip to content
Snippets Groups Projects
Commit a86b50bc authored by Hahn Axel (hahn)'s avatar Hahn Axel (hahn)
Browse files

postgres db backup uses a snapshot db

parent e1e22df9
No related branches found
No related tags found
1 merge request!147Pgsql dump with snapshots
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
# 2022-03-17 v1.3 WIP: add lines with prefix __DB__ # 2022-03-17 v1.3 WIP: add lines with prefix __DB__
# 2023-09-20 v1.4 FIX could not change directory to "/root": Permission denied # 2023-09-20 v1.4 FIX could not change directory to "/root": Permission denied
# 2024-10-02 ah v1.5 rename backup and restore function # 2024-10-02 ah v1.5 rename backup and restore function
# 2024-12-13 ah v1.6 backup uses a snapshot db
# ================================================================================ # ================================================================================
if [ -z "$BACKUP_TARGETDIR" ]; then if [ -z "$BACKUP_TARGETDIR" ]; then
...@@ -34,9 +35,14 @@ fi ...@@ -34,9 +35,14 @@ fi
# FUNCTION # FUNCTION
# -------------------------------------------------------------------------------- # --------------------------------------------------------------------------------
# backup all databases
function pgsql.backup(){ function pgsql.backup(){
local DATABASE
local SNAPSHOTDB
local OUTFILE
local snapshotprefix="snapshot_"
create_targetdir create_targetdir
# ----- change owner of directory because of su command # ----- change owner of directory because of su command
...@@ -45,24 +51,44 @@ function pgsql.backup(){ ...@@ -45,24 +51,44 @@ function pgsql.backup(){
# ----- GO # ----- GO
# prevent could not change directory to "/root": Permission denied # prevent could not change directory to "/root": Permission denied
(
cd /tmp cd /tmp
sSqlGetDblist="select datname from pg_database where not datistemplate and datallowconn order by datname;" sSqlGetDblist="select datname from pg_database where not datistemplate and datallowconn order by datname;"
for DATABASE in $(su ${PGUSER} -c "psql ${BACKUP_PARAMS} -At -c '$sSqlGetDblist' postgres" 2>/dev/null) for DATABASE in $( su ${PGUSER} -c "psql ${BACKUP_PARAMS} -At -c '$sSqlGetDblist' postgres" 2>/dev/null | grep -v "^$snapshotprefix" )
do do
echo -n "__DB__${SERVICENAME} backup $DATABASE ... " echo -n "__DB__${SERVICENAME} backup $DATABASE ... "
SNAPSHOTDB="${snapshotprefix}${DATABASE}"
OUTFILE="${BACKUP_TARGETDIR}/$(get_outfile ${DATABASE}).sql" OUTFILE="${BACKUP_TARGETDIR}/$(get_outfile ${DATABASE}).sql"
if su ${PGUSER} -c "pg_dump ${BACKUP_PARAMS} -Fp ${DATABASE} >$OUTFILE"; then
fetchrc >/dev/null echo -n " snapshot ... "
db._compressDumpfile "$OUTFILE" # drop snapshot db first - just in case
su ${PGUSER} -c "dropdb ${SNAPSHOTDB}" >/dev/null 2>&1
su ${PGUSER} -c "psql ${BACKUP_PARAMS} -c \"CREATE DATABASE ${SNAPSHOTDB} WITH TEMPLATE ${DATABASE};\"" >/dev/null
fetchrc >/dev/null
if [ $myrc -eq 0 ]; then
echo -n "backup ... "
if su ${PGUSER} -c "pg_dump ${BACKUP_PARAMS} -Fp ${SNAPSHOTDB} >$OUTFILE"; then
fetchrc >/dev/null
echo -n "delete snapshot ... "
su ${PGUSER} -c "dropdb ${SNAPSHOTDB}"
db._compressDumpfile "$OUTFILE"
else
fetchrc
su ${PGUSER} -c "dropdb ${SNAPSHOTDB}"
fi
else else
fetchrc cecho error "ERROR!"
fi fi
done done
cd - )
} }
# restore database dump file into database # restore database dump file into database
# param string database dump file (gzipped) # param string database dump file (gzipped)
# param string optional: database to import; default: database is parsed from file # param string optional: database to import; default: database is parsed from file
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment