From e017320e8c78d023edc3887538792102ac0f7d94 Mon Sep 17 00:00:00 2001 From: valentin Date: Sat, 11 May 2024 17:47:53 +0200 Subject: [PATCH] adding postgresql backup script --- midgard/backup/install | 10 +++++++++ midgard/backup/mkpsqlbackup | 35 +++++++++++++++++++++++++++++ midgard/backup/mkpsqlbackup.conf | 3 +++ midgard/backup/mkpsqlbackup.service | 5 +++++ midgard/backup/mkpsqlbackup.timer | 10 +++++++++ 5 files changed, 63 insertions(+) create mode 100755 midgard/backup/install create mode 100644 midgard/backup/mkpsqlbackup create mode 100644 midgard/backup/mkpsqlbackup.conf create mode 100644 midgard/backup/mkpsqlbackup.service create mode 100644 midgard/backup/mkpsqlbackup.timer diff --git a/midgard/backup/install b/midgard/backup/install new file mode 100755 index 0000000..a5b59c4 --- /dev/null +++ b/midgard/backup/install @@ -0,0 +1,10 @@ +#!/bin/sh + +set -e + +BASEDIR=$(dirname "$0") + +install -o root -g root -m 755 "$BASEDIR/mkpsqlbackup" /usr/local/bin/mkpsqlbackup +install -o root -g root -m 644 "$BASEDIR/mkpsqlbackup.conf" /etc/mkpsqlbackup.conf +install -o root -g root -m 644 "$BASEDIR/mkpsqlbackup.service" /etc/systemd/system/mkpsqlbackup.service +install -o root -g root -m 644 "$BASEDIR/mkpsqlbackup.timer" /etc/systemd/system/mkpsqlbackup.timer diff --git a/midgard/backup/mkpsqlbackup b/midgard/backup/mkpsqlbackup new file mode 100644 index 0000000..9d17125 --- /dev/null +++ b/midgard/backup/mkpsqlbackup @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +# Default configuration +DATABASES='' +BACKUP_DIR=/data/backup/postgresql +RETENTION_DAYS=7 + +if ! source /etc/mkpsqlbackup.conf ; then + echo '[MKPSQLBACKUP] : Unable to load configuration file' >&2 + exit 1 +fi + +if [ "$(id -un)" != 'postgres' ] ; then + echo '[MKPSQLBACKUP] : This script must be run as postgres user' >&2 + exit 2 +fi + +FINAL_BACKUP_DIR="$BACKUP_DIR/-$(date '+%Y-%m-%d')" +echo "[MKPSQLBACKUP] : Creating backup directory $FINAL_BACKUP_DIR" +if ! mkdir -p "$FINAL_BACKUP_DIR" ; then + echo "[MKPSQLBACKUP] : Unable to create backup directory $FINAL_BACKUP_DIR" + exit 3 +fi + +for db in DATABASES ; do + echo "[MKPSQLBACKUP] : Backup of $db" + if ! pg_dump -Fc "$db" -f "$FINAL_BACKUP_DIR/$db" ; then + echo "[MKPSQLBACKUP] : Unable to backup database $db" >&2 + fi +done + +echo '[MKPSQLBACKUP] : Purging old backups' +find "$BACKUP_DIR" -maxdepth 1 mindepth 1 -mtime +"$RETENTION_DAYS" -exec rm -rf '{}' ';' diff --git a/midgard/backup/mkpsqlbackup.conf b/midgard/backup/mkpsqlbackup.conf new file mode 100644 index 0000000..686e2e6 --- /dev/null +++ b/midgard/backup/mkpsqlbackup.conf @@ -0,0 +1,3 @@ +DATABASES='' +BACKUP_DIR=/data/backup/postgresql +RETENTION_DAYS=7 diff --git a/midgard/backup/mkpsqlbackup.service b/midgard/backup/mkpsqlbackup.service new file mode 100644 index 0000000..56282b2 --- /dev/null +++ b/midgard/backup/mkpsqlbackup.service @@ -0,0 +1,5 @@ +[Unit] +Description=Performing PostgreSQL database backups + +[Service] +ExecStart=/usr/local/bin/mkpsqlbackup diff --git a/midgard/backup/mkpsqlbackup.timer b/midgard/backup/mkpsqlbackup.timer new file mode 100644 index 0000000..f581c22 --- /dev/null +++ b/midgard/backup/mkpsqlbackup.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Performing PostgreSQL database backups every days at 3:00am + +[Timer] +# Run every days at 3:00am +OnCalendar=*-*-* 3:00:00 +Persistent=true + +[Install] +WantedBy=timers.target