BYTEBOOK
Bytebook Docs • PostgreSQL / Redis / Backup & DR
← Înapoi la Bytebook
PATH: DOCS / AUTO_BACKUP_GUIDE.HTML _
[00:00:00] DOCS_READY
DEMOS Main Archive JAVA LABS Enterprise PY LABS Neural Assets NODE LABS Async Runtime INFRA Control Center
DATABASE OPERATIONS & BACKUP • POSTGRESQL & REDIS

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

  1. Conectează-te la VPS prin SSH:
    ssh root@63.250.40.142
  2. 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.

  1. Deschide editorul Crontab pentru utilizatorul root:
    crontab -e
  2. Adaugă următoarea linie la finalul fișierului:
    0 2 * * * /root/scripts/auto_backup.sh >> /var/log/db_backup.log 2>&1
  3. 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