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.
#!/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:
- 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.
- 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
- 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 🙂
Leave a Reply