69 lines
2.3 KiB
Bash
Executable File
69 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# Backup script for Stones Database PostgreSQL database
|
|
|
|
set -e # Exit immediately if a command exits with a non-zero status
|
|
|
|
# Configuration
|
|
DB_NAME="stones"
|
|
DB_USER="stonesadmin" # Replace with your actual database user
|
|
BACKUP_DIR="/var/backups/stones-database"
|
|
DATETIME=$(date +"%Y-%m-%d_%H-%M-%S")
|
|
BACKUP_FILE="$BACKUP_DIR/stones_db_backup_$DATETIME.sql"
|
|
LOG_FILE="$BACKUP_DIR/backup.log"
|
|
ROTATION_DAYS=30 # Number of days to keep backups
|
|
|
|
# Colors for pretty output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Create backup directory if it doesn't exist
|
|
if [ ! -d "$BACKUP_DIR" ]; then
|
|
echo -e "${YELLOW}Creating backup directory...${NC}"
|
|
mkdir -p $BACKUP_DIR
|
|
fi
|
|
|
|
# Log start of backup
|
|
echo -e "$(date): Starting backup of $DB_NAME database" | tee -a $LOG_FILE
|
|
|
|
# Export database
|
|
echo -e "${YELLOW}Exporting database to $BACKUP_FILE...${NC}"
|
|
if pg_dump -U $DB_USER $DB_NAME > $BACKUP_FILE; then
|
|
# Compress the backup file
|
|
echo -e "${YELLOW}Compressing backup file...${NC}"
|
|
gzip $BACKUP_FILE
|
|
BACKUP_FILE="$BACKUP_FILE.gz"
|
|
|
|
# Calculate file size
|
|
FILE_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
|
|
|
|
echo -e "${GREEN}Backup completed successfully: $BACKUP_FILE (Size: $FILE_SIZE)${NC}" | tee -a $LOG_FILE
|
|
else
|
|
echo -e "${RED}Backup failed!${NC}" | tee -a $LOG_FILE
|
|
exit 1
|
|
fi
|
|
|
|
# Remove old backups
|
|
echo -e "${YELLOW}Removing backups older than $ROTATION_DAYS days...${NC}"
|
|
find $BACKUP_DIR -name "stones_db_backup_*.sql.gz" -type f -mtime +$ROTATION_DAYS -delete
|
|
echo -e "$(date): Removed old backups" | tee -a $LOG_FILE
|
|
|
|
# Optional: Copy backup to another location (e.g., remote server or cloud storage)
|
|
# Uncomment and modify these lines to enable remote backup
|
|
|
|
# SCP to remote server
|
|
# echo -e "${YELLOW}Copying backup to remote server...${NC}"
|
|
# scp $BACKUP_FILE user@remote-server:/path/to/backup/dir/
|
|
|
|
# Or upload to S3 (requires AWS CLI)
|
|
# echo -e "${YELLOW}Uploading backup to S3...${NC}"
|
|
# aws s3 cp $BACKUP_FILE s3://your-bucket/stones-database/
|
|
|
|
echo -e "${GREEN}Backup process completed!${NC}"
|
|
|
|
# To use this script as a cronjob, add a line like this to your crontab:
|
|
# Run daily at 2:00 AM: 0 2 * * * /path/to/backup-db.sh
|
|
|
|
# To setup the cronjob automatically, uncomment these lines:
|
|
# (crontab -l 2>/dev/null; echo "0 2 * * * $(readlink -f $0)") | crontab - |