Jednoduchý backup MySQL databáz

Tento skriptík používam už dosť dlho v rôznych podobách na jednoduché zálohovanie MySQL databázy/databáz do určeného adresára vo forme /server/rok/mesiac/deň/databáza/tabuľka.sql.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
 
SERVERS="localhost server1.example.com"
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
BACKUP_USER="backup"
BACKUP_PASSWORD="b3k4p"
BACKUP_PATH="/mnt/storage/database-backup/"
 
for SERVER in $SERVERS
do
    echo Backing up host ${SERVER}
    DATABASES=`mysql -N -B -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
    -e "SHOW DATABASES;"`
    for DATABASE in $DATABASES
    do
        CURRENT_PATH=${BACKUP_PATH}/${SERVER}/${YEAR}/${MONTH}/${DAY}/${DATABASE}/
        mkdir -p $CURRENT_PATH
 
        TABLES=`mysql -N -B -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
        $DATABASE -e "SHOW TABLES;"`
        for TABLE in $TABLES
        do
            mysqldump -h $SERVER -u $BACKUP_USER -p${BACKUP_PASSWORD} \
            $DATABASE $TABLE > ${CURRENT_PATH}/${TABLE}.sql
        done
    done
done

Kód je viac-menej samovysvetľujúci, ale pre ozrejmenie:

  • SERVERS – adresy serverov, ktoré chceme zálohovať
  • BACKUP_USER – login usera, ktorého používame na backupovanie (môžete aj root, ja používam dedikovaného používateľa s právami obmedzenými len na zálohovanie)
  • BACKUP_PASSWORD – pochopiteľne heslo usera 🙂
  • BACKUP_PATH – adresár, kde budú uložené zálohy

Už z prvého pohľadu vyplýva, že skript má niekoľko nevýhod:

  1. Pre každú činnosť (zoznam databáz, zoznam tabuliek, zálohovanie tabuľky) sa vytvorí samostatná konekcia na MySQL server. Teda ak máme 10 serverov po 10 databáz s 10 tabuľkami, môže skript spôsobovať problémy s výkonom servera.
  2. Heslo je uložené v plaintexte a tým pádom viditeľné aj v samotnom skripte, aj vo výpise procesov. Elegantnejšie by bolo použiť heslo v my.cnf uložené v domovskom adresári užívateľa, pod ktorým zálohy vykonávame
  3. Skript dodžiava hardcoded schému a nepoužíva kompresiu dumpov, prípade nejakú rotáciu.

Aj napriek týmto neduhom to však postačí na základné zálohovanie databáz. Dúfam, že tento skript pomôže niektorým začínajúcim adminom, pri znovuvynachádzaní kolesa 🙂

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *