80 lines
3.1 KiB
Bash
Executable File
80 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
SOURCE_DIR="/tmp/db2_backup/"
|
|
DEST_DIR="thevault:/nexus/postgresql/db2/"
|
|
DATE=$(date +%Y%m%d%H%M)
|
|
PG_USER="postgres"
|
|
SOURCE_SERVER="zcluster.technodrome2.sshjunkie.com" # Source server (database server)
|
|
SOURCE_REMOTE="technodrome2" # rclone remote for source server (configured earlier)
|
|
DEST_REMOTE="thevault" # rclone remote for destination server (The Vault)
|
|
|
|
# Ensure necessary tools are available
|
|
command -v pg_basebackup >/dev/null 2>&1 || { echo "pg_basebackup not found, exiting."; exit 1; }
|
|
command -v rclone >/dev/null 2>&1 || { echo "rclone not found, exiting."; exit 1; }
|
|
command -v ssh >/dev/null 2>&1 || { echo "ssh not found, exiting."; exit 1; }
|
|
|
|
# Step 1: SSH into the database server and run pg_basebackup
|
|
echo "Starting pg_basebackup for db2 on $SOURCE_SERVER..."
|
|
|
|
# Ensure the directory exists on the source server
|
|
ssh doc@$SOURCE_SERVER "sudo mkdir -p $SOURCE_DIR$DATE" # Create the directory if it doesn't exist
|
|
|
|
# Run pg_basebackup
|
|
ssh doc@$SOURCE_SERVER "pg_basebackup -h localhost -D $SOURCE_DIR$DATE -U $PG_USER -Ft -z -P"
|
|
|
|
# Check if pg_basebackup was successful
|
|
if [ $? -eq 0 ]; then
|
|
echo "pg_basebackup completed successfully. Verifying backup directory on $SOURCE_SERVER..."
|
|
|
|
# Verify that the backup directory exists
|
|
ssh doc@$SOURCE_SERVER "ls -l $SOURCE_DIR$DATE"
|
|
|
|
# If the directory exists, proceed with rclone transfer
|
|
if [ $? -eq 0 ]; then
|
|
echo "Backup directory exists. Proceeding to rclone transfer..."
|
|
|
|
# Step 2: Use rclone to copy the backup from the source server to The Vault
|
|
retry=0
|
|
max_retries=3
|
|
while ! rclone copy $SOURCE_REMOTE:$SOURCE_DIR$DATE/ $DEST_REMOTE:$DEST_DIR --progress --checksum; do
|
|
if [ $retry -ge $max_retries ]; then
|
|
echo "Rclone transfer failed after $max_retries attempts."
|
|
exit 1
|
|
fi
|
|
retry=$((retry+1))
|
|
echo "Retrying rclone transfer... attempt $retry"
|
|
sleep 5
|
|
done
|
|
|
|
# Check if rclone was successful
|
|
if [ $? -eq 0 ]; then
|
|
echo "Rclone transfer completed successfully. Proceeding to snapshot..."
|
|
|
|
# Step 3: Create a ZFS snapshot on The Vault
|
|
ssh root@thevault.sshjunkie.com "sudo zfs snapshot nexus/postgresql/db2@$DATE"
|
|
|
|
# Verify snapshot creation on The Vault
|
|
ssh root@thevault.sshjunkie.com "zfs list -t snapshot | grep nexus/postgresql/db2@$DATE" >/dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
echo "ZFS snapshot nexus/postgresql/db2@$DATE created successfully on The Vault."
|
|
else
|
|
echo "Snapshot creation failed on The Vault."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Error during rclone transfer. Backup not transferred."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Backup directory not found on $SOURCE_SERVER. Aborting transfer."
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Error during pg_basebackup. Backup not created."
|
|
exit 1
|
|
fi
|
|
|
|
# Clean up after success
|
|
ssh doc@$SOURCE_SERVER "sudo rm -rf $SOURCE_DIR$DATE"
|
|
echo "Backup and snapshot process completed successfully."
|