From 41e897f4945aaf8fbcdf0b12ac2f08c5e6ae0458 Mon Sep 17 00:00:00 2001 From: doc Date: Mon, 30 Jun 2025 20:11:52 +0000 Subject: commit of legacy code --- db2_backup.sh | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 db2_backup.sh (limited to 'db2_backup.sh') 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" -- cgit v1.2.3