diff options
author | doc <doc@filenotfound.org> | 2025-06-30 20:11:52 +0000 |
---|---|---|
committer | doc <doc@filenotfound.org> | 2025-06-30 20:11:52 +0000 |
commit | 41e897f4945aaf8fbcdf0b12ac2f08c5e6ae0458 (patch) | |
tree | db7c3520fd91abc3cf56b1a52095d23f3a80d059 /db2_backup.sh |
Diffstat (limited to 'db2_backup.sh')
-rwxr-xr-x | db2_backup.sh | 69 |
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" |