summaryrefslogtreecommitdiff
path: root/db2_backup.sh
blob: 3e399bb2db11fc72c519e281acebe4e73d83c8e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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"