Skip to content

Cum să faci backup și restore la o bază de date — pg_dump, mysqldump

DodaTech Updated 2025-01-15 3 min read

In this tutorial, you'll learn about Cum să faci backup și restore la o bază de date. We cover key concepts, practical examples, and best practices.

Cum să faci backup și restore la o bază de date PostgreSQL și MySQL folosind pg_dump, mysqldump și instrumente native, pentru a preveni pierderea datelor în caz de avarie sau eroare umană.

Problema

Fără un plan de backup, datele unei aplicații pot fi pierdute definitiv din cauza unui accident (ștergere accidentală, eroare de cod, atac ransomware) sau a unei defecțiuni hardware. Restaurarea fără un backup recent înseamnă ore sau zile de muncă pierdută.

The Wrong Way

Backup manual, fără scriptare sau verificare:

pg_dump my_database > backup.sql
# Fără verificare, fără compresie, fără timestamp
# Peste o lună nu știi ce conține backup.sql

Problema: Backupul suprascrie fișierul anterior, nu este comprimat, și nu știi dacă s-a generat corect până când încerci să restaurezi.

The Right Way

Backup structurat, comprimat și verificat:

# Backup PostgreSQL cu timestamp și compresie
pg_dump -h localhost -U postgres \
  --format=custom \
  --compress=9 \
  --file="db_backup_$(date +%Y%m%d_%H%M%S).dump" \
  my_database

Output:

db_backup_20250115_143022.dump

Backup PostgreSQL

# Backup complet (custom format, recomandat)
pg_dump -U postgres --format=custom \
  --compress=9 \
  --file=prod_backup.dump \
  my_database

# Backup doar schema (fără date)
pg_dump -U postgres --schema-only \
  --file=schema.sql \
  my_database

# Backup doar datele unei tabele
pg_dump -U postgres --table=orders \
  --data-only \
  --file=orders_backup.sql \
  my_database

Restore PostgreSQL

# Restore din format custom
pg_restore -U postgres -d my_database \
  --clean \
  --if-exists \
  prod_backup.dump

Backup MySQL

# Backup complet MySQL
mysqldump -h localhost -u root -p \
  --databases my_database \
  --routines \
  --triggers \
  --single-transaction \
  --result-file=mysql_backup_$(date +%Y%m%d).sql

# Backup comprimat direct
mysqldump -u root -p my_database | gzip > mysql_backup.sql.gz

Restore MySQL

mysql -u root -p my_database < mysql_backup.sql

# Din fișier comprimat
gunzip < mysql_backup.sql.gz | mysql -u root -p my_database

Step-by-Step Fix

1. Creează un script de backup automat

#!/bin/bash
# backup_db.sh
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
DB_NAME="my_database"

pg_dump -U postgres \
  --format=custom \
  --compress=9 \
  --file="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.dump" \
  ${DB_NAME}

# Verifică integritatea
pg_restore --list "${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.dump" \
  > /dev/null 2>&1 && echo "Backup valid" || echo "Backup corupt"

2. Programează backup automat (cron)

# Zilnic la 3:00 AM
0 3 * * * /usr/local/bin/backup_db.sh

# Șterge backupurile mai vechi de 30 de zile
0 4 * * * find /backups -name "*.dump" -mtime +30 -delete

3. Testează restaurarea periodic

Rulează restaurarea pe un mediu de test cel puțin o dată pe lună pentru a verifica integritatea backupurilor.

Prevention Tips

  • Folosește format custom (--format=custom) pentru backupuri PostgreSQL — suportă compresie și restaurare selectivă
  • Stochează backupurile în locații diferite (local + cloud)
  • Testează restaurarea periodic — un backup netestat este un backup inexistent
  • Criptează backupurile care conțin date sensibile

Greșeli comune cu backup

  1. Backup fără compresie — fișiere uriașe care umplu discul rapid
  2. Un singur backup — dacă fișierul este corupt, nu ai alternativă
  3. Backup pe același disc — la defectarea discului pierzi și datele și backupul
  4. Fără testarea restaurării — descoperi că backupul e corupt doar când ai nevoie
  5. Omisiunea rutinelor și triggerelormysqldump fără --routines --triggers

Exercițiu practic

Scrie un script bash care face backup complet al unei baze de date PostgreSQL, îl comprimă, îl salvează cu timestamp, și transmite o notificare prin syslog. Programează-l în cron să ruleze zilnic.

FAQ

### Ce format de backup ar trebui să folosesc?

Pentru PostgreSQL, formatul custom (--format=custom) este recomandat — suportă compresie, restaurare paralelă și selectivă. Pentru MySQL, SQL plain text cu gzip este standardul.

Cât de des ar trebui să fac backup?

Depinde de cât de repede îți permiți să pierzi date. Zilnic pentru majoritatea aplicațiilor, la fiecare oră pentru aplicații critice. Regula de bază: RPO (Recovery Point Objective) determină frecvența.

Backupul încetinește baza de date în producție?

Depinde de metodă. pg_dump rulează în background și nu blochează citirile. mysqldump --single-transaction creează un snapshot consistent fără a bloca tabelele InnoDB.

Construit de dezvoltătorii Doda Browser, DodaZIP și Durga Antivirus Pro. Uneltele DodaTech se integrează nativ cu bazele de date pentru productivitate și securitate sporite.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro