Fertiges Backup und Restore Skript
This commit is contained in:
63
backup-script.sh
Executable file
63
backup-script.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Speicherort der Backups
|
||||
BACKUP_ROOT="/var/backups"
|
||||
|
||||
# 30 Backups sollen behalten werden
|
||||
RETAIN=30
|
||||
|
||||
# Postgres-Verbindung
|
||||
PGHOST="localhost"
|
||||
PGPORT="5432"
|
||||
PGUSER="florian"
|
||||
PGDATABASE="oqtane"
|
||||
|
||||
OQTANE_DIR="/home/konstantin/oqtane.framework/publish"
|
||||
|
||||
# Timestamp für den Ordnernamen
|
||||
TS="$(date -u +'%Y%m%dT%H%M%SZ')"
|
||||
DEST_DIR="${BACKUP_ROOT}/oqtane_${TS}"
|
||||
|
||||
########## Vorbereitung ##########
|
||||
mkdir -p "$DEST_DIR"
|
||||
|
||||
echo "[$(date -Iseconds)] Starte Backup, Ziel: $DEST_DIR"
|
||||
|
||||
########## 1) Postgres-Backup ##########
|
||||
# Voraussetzung: Passwortzugang über ~/.pgpass für den Benutzer,
|
||||
# unter dem dieses Skript läuft.
|
||||
|
||||
# Dump nur der DB oqtane (Custom-Format)
|
||||
pg_dump -h "localhost" -p "5432" -U "florian" -d "oqtane" -Fc \
|
||||
-f "${DEST_DIR}/db_${PGDATABASE}.dump"
|
||||
|
||||
|
||||
echo "[$(date -Iseconds)] Postgres-Backup fertig."
|
||||
|
||||
########## 2) Komplettes System-Backup ##########
|
||||
# Achtung: sollte als root laufen, damit alle Dateien gelesen werden können.
|
||||
|
||||
tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz" \
|
||||
--absolute-names "$OQTANE_DIR"
|
||||
|
||||
echo "[$(date -Iseconds)] Oqtane-Ordner gesichert."
|
||||
|
||||
########## 3) Rotation: nur die letzten $RETAIN Backups behalten ##########
|
||||
shopt -s nullglob
|
||||
backups=( "$BACKUP_ROOT"/* )
|
||||
|
||||
# Nach Ordnernamen (Timestamp) absteigend sortieren = neueste zuerst
|
||||
IFS=$'\n' backups=( $(printf '%s\n' "${backups[@]}" | sort -r) )
|
||||
unset IFS
|
||||
|
||||
if (( ${#backups[@]} > RETAIN )); then
|
||||
echo "[$(date -Iseconds)] Zu viele Backups: ${#backups[@]} > $RETAIN. Lösche alte…"
|
||||
for old in "${backups[@]:RETAIN}"; do
|
||||
echo " Lösche $old"
|
||||
rm -rf -- "$old"
|
||||
done
|
||||
fi
|
||||
|
||||
echo "[$(date -Iseconds)] Backup-Job abgeschlossen."
|
||||
Reference in New Issue
Block a user