Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

Administrare baze de date: realizarea unei copii de siguranță (backup) MySQL prin linia de comandă mysqldump

Administrare baze de date: realizarea unei copii de siguranță (backup) MySQL prin linia de comandă mysqldump

Realizarea periodică a copiilor de siguranță (backup) pentru bazele de date reprezintă o măsură de securitate fundamentală pentru orice administrator de sistem sau dezvoltator web. Dacă beneficiezi de acces SSH pe serverul tău, poți automatiza complet acest proces printr-un script de tip Bash care extrage conținutul fiecărei baze de date cu ajutorul utilitarului mysqldump și îl arhivează într-un format comprimat de înaltă eficiență.

Script Bash pentru backup automatizat și arhivare TBZ

Formatul de arhivă comprimată .tbz (sau .tar.bz2, care utilizează algoritmul bzip2) oferă o rată excelentă de compresie pentru datele de tip text generat de bazele de date relaționale. În practică, un export SQL necomprimat de 1,5 GB poate fi redus frecvent la aproximativ 150 MB, economisind spațiu critic pe disc și reducând timpul de transfer.

Iată scriptul optimizat pentru efectuarea copiilor de siguranță pe mai multe domenii și baze de date:

#!/bin/bash

#####
# Configurare parametri de lucru
#####

# Listă cu numele domeniilor (utilizate ca subdirectoare de ieșire)
domains=(domeniu1 domeniu2 domeniu3)

# Listă corespondentă cu numele bazelor de date din MySQL
sqldbs=(baza1 baza2 baza3)

# Directorul rădăcină unde se vor salva arhivele de backup
opath="/backup/mysql/"

# Gazda serverului MySQL (de regulă localhost)
mysqlhost="localhost"

# Utilizatorul MySQL cu drepturi de citire pe bazele de date
username="root"

# Parola asociată utilizatorului MySQL
password="parola_ta_aici"

#####
# Sfârșitul parametrilor configurabili
#####

# Șablonul de dată atașat fișierului arhivat (LL-ZZ-AAAA)
suffix=$(date +%m-%d-%Y)

# Parcurgerea fiecărei baze de date din listă
for (( i = 0 ; i < ${#sqldbs[@]} ; i++ )); do
    # Determinarea căii directorului destinație
    cpath="${opath}${domains[$i]}"

    # Verificarea și crearea directorului dacă nu există
    if [ ! -d "$cpath" ]; then
        echo "Creare director de destinație: $cpath"
        mkdir -p "$cpath"
    fi

    # Realizarea exportului SQL prin mysqldump
    echo "Exportare bază de date: ${sqldbs[$i]}..."
    mysqldump -c -h "$mysqlhost" --user="$username" --password="$password" "${sqldbs[$i]}" > "${cpath}/${sqldbs[$i]}_${suffix}.sql"

    # Arhivarea și compresia fișierului prin bzip2
    echo "Compresie în format .tbz..."
    tar -cjvf "${cpath}/${sqldbs[$i]}_${suffix}.tbz" -C "$cpath" "${sqldbs[$i]}_${suffix}.sql"

    # Eliminarea fișierului brut .sql pentru eliberarea spațiului pe disc
    rm "${cpath}/${sqldbs[$i]}_${suffix}.sql"
done

echo "Toate copiile de siguranță au fost generate cu succes."

Explicația parametrilor și cerințe de sistem

  • Drepturi de acces: Utilizatorul de MySQL specificat în variabila username trebuie să dețină privilegii suficiente pe toate bazele de date incluse în matricea sqldbs (în special drepturi de tip SELECT, LOCK TABLES și SHOW VIEW).
  • Opțiunea -c în mysqldump: Forțează generarea comenzilor INSERT complete, specificând explicit numele coloanelor pentru fiecare înregistrare, ceea ce crește compatibilitatea la restaurare chiar dacă schema tabelelor a suferit modificări ulterioare.
  • Compresia tar -cjvf: Fanionul -j indică utilizarea utilitarului bzip2 pentru a obține o rată superioară de compresie față de formatul gzip convențional.

Automatizarea procesului prin Cron

Pentru ca backup-ul să se ruleze automat în fiecare noapte fără intervenție manuală, poți adăuga o intrare în tabela de planificare crontab a serverului:

# Deschiderea editorului crontab
crontab -e

# Executarea scriptului în fiecare noapte la ora 02:30
30 2 * * * /bin/bash /cale/catre/backup_mysql.sh > /var/log/backup_mysql.log 2>&1

Bune practici de securitate

Pentru a evita afișarea parolei în lista proceselor active de sistem (prin comanda ps), este recomandat să configurezi fișierul protejat ~/.my.cnf cu permisiuni restrictive (chmod 600 ~/.my.cnf), permițând utilitarului mysqldump să citească datele de autentificare fără a le expune în linia de comandă a scriptului.

3 comentarii

Lasă un comentariu