Hallo Forum,
bezugnehmend auf den Thread PostgreSQL:Backup habe ich ein Shell-Skript gebastelt, dass bis auf die Systemtabellen alle Tabellen von PostgreSQL-Datenbanken in einer MagentaCloud sichert. Vielleicht ist es ja für den einen oder anderen User interessant.
Das Skript ist bestimmt nicht der Weisheit letzter Schluß und man kann bestimmt noch einige Dinge verbessern. Vielleicht ist es ja ein Grundgerüst für andere Ideen.
Beste Grüße und gesund bleiben!
bezugnehmend auf den Thread PostgreSQL:Backup habe ich ein Shell-Skript gebastelt, dass bis auf die Systemtabellen alle Tabellen von PostgreSQL-Datenbanken in einer MagentaCloud sichert. Vielleicht ist es ja für den einen oder anderen User interessant.
Code:
#!/bin/sh
# Shell-Skript als Cronjob fuer Backup aller Datenbanktabellen
# =========================================================
# Datum: Ergaenzung:
# ---------------------------------------------------------
# 31.03.2020 Skript fertiggestellt
# ~/.netrc fuer MagentaCloud
# ---------------------------------------------------------
# machine webdav.magentacloud.de
# login MagentaCloud-Login
# password MagentaCloud-Password
# Magenta-Cloud
# ---------------------------------------------------------
mag_curl=`which curl`
mag_netrc="--netrc-file /home/admin/.netrc"
mag_target="https://webdav.magentacloud.de/PostgreSQL-Backup/"
# PostgreSQL-Kommandos
# ---------------------------------------------------------
pg_dump=`which pg_dump`
pg_sql=`which psql`
pg_userid="<userid>"
pg_host="localhost"
pg_sql_tables="SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';"
export PGPASSWORD="<password>"
# Allgemeine Variablen
# ---------------------------------------------------------
datum=`date "+%Y-%m-%d"`
datum_minus2tage=`date -v-2d "+%Y-%m-%d"`
backuppath="/home/backup/"
logfile=${backuppath}"backup.log"
# databases: alle Datenbanken durch Space getrennt eintragen
databases="bergtouren webcams wetter"
echo "Start Backup" > ${logfile}
date >> ${logfile}
echo "----------------------------" >> ${logfile}
for d in $databases; do
echo "----------------------------" >> ${logfile}
echo $d ":" >> ${logfile}
echo "----------------------------" >> ${logfile}
tables=`${pg_sql} -t -d $d -U ${pg_userid} -h ${pg_host} -c "${pg_sql_tables}"`
for t in $tables; do
echo $d " + " $t ":" >> ${logfile}
backupfile="backup_${d}_${t}_$datum.zstd"
echo ${backupfile} >> ${logfile}
${pg_dump} -h ${pg_host} -U ${pg_userid} -d $d -t $t -Fc | zstd > ${backuppath}${backupfile}
if [ "$?" -ne 0 ]; then
echo $d ":" $t " Dump konnte nicht erzeugt werden." >> ${logfile}
else
echo $d ":" $t " Dump wurde erzeugt." >> ${logfile}
fi
if [ -e "${backuppath}${backupfile}" ]; then
result=`${mag_curl} ${mag_netrc} --anyauth --silent --show-error -T ${backuppath}${backupfile} ${mag_target}${backupfile} | grep '201 Created' | awk {'print substr($1, 8, 3)'}`
echo "Meldung: " $result >> ${logfile}
if [ $result -gt 199 ] && [ $result -lt 300 ]; then
echo $backupfile " Backup wurde uebertragen." >> ${logfile}
backupfile_alt="pg_backup_${d}_${t}_$datum_minus2tage.zstd"
if [ -e "${backuppath}${backupfile_alt}" ]; then
echo "loeschen auf server" >> ${logfile}
${mag_curl} ${mag_netrc} --anyauth -X DELETE ${mag_target}${backupfile}
rm -f ${backuppath}${backupfile_alt}
echo $backupfile_alt " Backup wurde geloescht." >> ${logfile}
fi
else
echo $backupfile " Backup konnte nicht uebertragen werden." >> ${logfile}
fi
fi
done
done
echo "----------------------------" >> ${logfile}
echo "Ende Backup:" >> ${logfile}
date >> ${logfile}
echo "----------------------------" >> ${logfile}
cat ${logfile} | mail -s "Database-Backup" <email-adresse admin>
Das Skript ist bestimmt nicht der Weisheit letzter Schluß und man kann bestimmt noch einige Dinge verbessern. Vielleicht ist es ja ein Grundgerüst für andere Ideen.
Beste Grüße und gesund bleiben!