Ghid Backup Automatizat pentru PostgreSQL și Redis pe VPS
Acest ghid descrie pas cu pas cum creezi un sistem automat de backup zilnic pentru baze de date PostgreSQL și Redis pe VPS-ul Ubuntu (63.250.40.142), utilizând scripturi Shell și task-uri Cron.
# Structură și Funcționalități
• Locație Backup-uri: /var/backups/db_backups/
• Compresie: .tar.gz și .sql.gz pentru economisirea spațiului pe disc.
• Rotire automată: Șterge automat backup-urile mai vechi de 7 zile.
• Execuție: Automatizată în fiecare noapte la ora 02:00 via Crontab.
1. Pregătirea Directoarelor și Permisiunilor
- Conectează-te la VPS prin SSH:
ssh root@63.250.40.142 - Creează directoarele unde se vor salva backup-urile:
mkdir -p /var/backups/db_backups/postgres mkdir -p /var/backups/db_backups/redis mkdir -p /root/scripts
2. Crearea Scriptului de Backup
Creează un script unificat care va extrage datele din PostgreSQL și Redis, le va arhiva și va curăța fișierele vechi.
A. Deschide fișierul script
nano /root/scripts/auto_backup.sh
B. Adaugă codul de mai jos
#!/bin/bash
# ==========================================
# CONFIGURARE
# ==========================================
BACKUP_DIR="/var/backups/db_backups"
PG_BACKUP_DIR="$BACKUP_DIR/postgres"
REDIS_BACKUP_DIR="$BACKUP_DIR/redis"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
RETENTION_DAYS=7
# Date autentificare Postgres
PG_USER="postgres"
PG_DB="testdb"
echo "=== Start Backup: $DATE ==="
# ==========================================
# 1. BACKUP POSTGRESQL
# ==========================================
echo "[1/3] Procesare backup PostgreSQL ($PG_DB)..."
PG_FILE="$PG_BACKUP_DIR/pg_${PG_DB}_${DATE}.sql.gz"
sudo -u $PG_USER pg_dump $PG_DB | gzip > $PG_FILE
if [ $? -eq 0 ]; then
echo " ✔ Backup PostgreSQL creat cu succes: $PG_FILE"
else
echo " ❌ Eroare la crearea backup-ului PostgreSQL!"
fi
# ==========================================
# 2. BACKUP REDIS
# ==========================================
echo "[2/3] Procesare backup Redis..."
REDIS_FILE="$REDIS_BACKUP_DIR/redis_${DATE}.rdb"
# Forțează Redis să salveze snapshot-ul curent din memorie pe disc
redis-cli BGSAVE > /dev/null 2>&1
# Așteaptă 3 secunde pentru finalizarea scrierii pe disc
sleep 3
# Copiază fișierul dump.rdb din folderul Redis
REDIS_RDB_PATH="/var/lib/redis/dump.rdb"
if [ -f "$REDIS_RDB_PATH" ]; then
cp $REDIS_RDB_PATH $REDIS_FILE
gzip $REDIS_FILE
echo " ✔ Backup Redis creat cu succes: ${REDIS_FILE}.gz"
else
echo " ❌ Fișierul dump.rdb nu a fost găsit la $REDIS_RDB_PATH"
fi
# ==========================================
# 3. ROTIRE BACKUP-URI VECHI (Curățare)
# ==========================================
echo "[3/3] Curățare backup-uri mai vechi de $RETENTION_DAYS zile..."
find $PG_BACKUP_DIR -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -exec rm -f {} \;
find $REDIS_BACKUP_DIR -type f -name "*.gz" -mtime +$RETENTION_DAYS -exec rm -f {} \;
echo "=== Backup Finalizat cu Succes ==="
(Salvează cu Ctrl + O, Enter, Ctrl + X).
C. Acordă drepturi de execuție scriptului
chmod +x /root/scripts/auto_backup.sh
3. Testarea Manuală a Scriptului
Înainte de a automatiza procesul, execută scriptul manual pentru a verifica dacă totul funcționează corect:
/root/scripts/auto_backup.sh
Verifică fișierele generate:
ls -lh /var/backups/db_backups/postgres
ls -lh /var/backups/db_backups/redis
4. Automatizarea Execuției prin Crontab
Vom configura sistemul cron să execute acest script în fiecare noapte la ora 02:00 AM.
- Deschide editorul Crontab pentru utilizatorul
root:crontab -e - Adaugă următoarea linie la finalul fișierului:
0 2 * * * /root/scripts/auto_backup.sh >> /var/log/db_backup.log 2>&1 - Salvează și închide fișierul.
5. Ghid de Restaurare (Restoring Data)
În cazul în care ai nevoie să restaurezi datele din backup:
A. Restaurare PostgreSQL
gunzip -c /var/backups/db_backups/postgres/pg_testdb_YYYY-MM-DD_HH-MM-SS.sql.gz | sudo -u postgres psql testdb
B. Restaurare Redis
# 1. Oprește serviciul Redis
systemctl stop redis-server
# 2. Decomprimă și copiază fișierul RDB peste cel existent
gunzip -c /var/backups/db_backups/redis/redis_YYYY-MM-DD_HH-MM-SS.rdb.gz > /var/lib/redis/dump.rdb
# 3. Schimbă proprietarul fișierului
chown redis:redis /var/lib/redis/dump.rdb
# 4. Repornește serviciul Redis
systemctl start redis-server