summaryrefslogtreecommitdiff
path: root/db2_backup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'db2_backup.sh')
-rwxr-xr-xdb2_backup.sh69
1 files changed, 69 insertions, 0 deletions
diff --git a/db2_backup.sh b/db2_backup.sh
new file mode 100755
index 0000000..3e399bb
--- /dev/null
+++ b/db2_backup.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+#
+# Script Name: db2_zfs_backup.sh
+# Description: Creates a raw base backup of PostgreSQL on zcluster.technodrome2 using pg_basebackup in directory mode.
+# Transfers the backup to The Vaultโ€™s ZFS dataset and snapshots it for long-term retention.
+# Requirements: pg_basebackup, SSH access, rclone or rsync, ZFS dataset available at destination
+# Usage: ./db2_zfs_backup.sh
+# Author: Doc @ Genesis Ops
+# Date: 2025-05-12
+#
+
+### CONFIGURATION ###
+SOURCE_SERVER="zcluster.technodrome2.sshjunkie.com"
+SOURCE_USER="doc"
+PG_USER="postgres"
+SOURCE_BASE_DIR="/tmp/db2_backup" # On the remote node
+BACKUP_LABEL="$(date +%Y%m%d%H%M)"
+REMOTE_BACKUP_DIR="$SOURCE_BASE_DIR/$BACKUP_LABEL"
+
+# Remote source rclone config (optional)
+SOURCE_REMOTE="technodrome2"
+
+# Local destination
+DEST_DATASET="vaultpool/postgresql/db2" # Adjust as needed
+DEST_MOUNT="/nexus/postgresql/db2" # Must be mountpoint for $DEST_DATASET
+FULL_DEST="$DEST_MOUNT/$BACKUP_LABEL"
+
+#####################
+
+echo "๐Ÿš€ Starting ZFS-aware base backup for db2 from $SOURCE_SERVER..."
+
+# Ensure pg_basebackup will run cleanly
+ssh $SOURCE_USER@$SOURCE_SERVER "sudo mkdir -p '$REMOTE_BACKUP_DIR' && \
+ sudo pg_basebackup -h localhost -D '$REMOTE_BACKUP_DIR' -U $PG_USER -Fp -R -X fetch -P"
+
+if [[ $? -ne 0 ]]; then
+ echo "โŒ pg_basebackup failed on $SOURCE_SERVER."
+ exit 1
+fi
+
+echo "๐Ÿ“ฆ Backup created on $SOURCE_SERVER at $REMOTE_BACKUP_DIR"
+
+# Pull the backup using rsync (preserves structure + timestamps)
+echo "๐Ÿ”„ Syncing backup to The Vault at $FULL_DEST..."
+mkdir -p "$FULL_DEST"
+rsync -avz --progress $SOURCE_USER@$SOURCE_SERVER:"$REMOTE_BACKUP_DIR/" "$FULL_DEST/"
+
+if [[ $? -ne 0 ]]; then
+ echo "โŒ rsync transfer failed!"
+ exit 1
+fi
+
+# Snapshot the full ZFS backup dataset
+SNAPSHOT_NAME="${DEST_DATASET}@${BACKUP_LABEL}"
+echo "๐Ÿ“ธ Creating ZFS snapshot: $SNAPSHOT_NAME"
+zfs snapshot "$SNAPSHOT_NAME"
+
+if [[ $? -eq 0 ]]; then
+ echo "โœ… Snapshot $SNAPSHOT_NAME created successfully."
+else
+ echo "โŒ Snapshot creation failed."
+ exit 1
+fi
+
+# Optional: Clean up the remote backup dir
+echo "๐Ÿงน Cleaning up temporary backup on $SOURCE_SERVER..."
+ssh $SOURCE_USER@$SOURCE_SERVER "sudo rm -rf '$REMOTE_BACKUP_DIR'"
+
+echo "๐ŸŽ‰ Backup and ZFS snapshot complete. Stored in $FULL_DEST"