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:
- 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
Pridaj komentár