MySQL adatbázisok mentése


Nemtudom ki hogy van vele, én általában az egész adatbázist, annak minden adatbázisával és táblájával együtt szoktam  menteni.
Persze visszaállításkor valahogy meg kell oldani, hogy csak az a bizonyos adatbázis, esetleg csak egy táblája legyen visszaállítva.
Már azzal megkönnyítem a helyzetem, ha az adatbázisszerverről külön- külön mentem az adatbázisokat, hiszenen így visszaállításkor nem kell a másikakkal foglalkozni, egyszerűbb a helyzet.

Régebben mindig úgy állítottam be a MySQL mentését, hogy létrehoztam egy felhasználót, akinek csak select és lock table jogosultsága volt minden adatbázisra és csak localhoston jelentkezhet be.
Ez körülményes, viszont talán a legbiztonságosabb megoldás.

Ennél egy sokkal kényelmesebb és jól beállított fájl jogosultság után biztonságos  megoldást mutatok. Arra figyelni kell, hogy annak akinek feltétlenül nem szükséges, ne módosíthassa a szkriptet, mert a debian-sys-maint felhasználó adatai megjelenhetnek benne.

Szóval a szkript működése szavakban:
Minden adatbázisról visszamenőleg az előző 14 nap mentését tartja meg.
Első körben lekérdezi a helyi kiszolgálón az adatbázisokat (show databases;) majd először letörli a régi mentést, végül a mysqldump paranccsal mentést készít róla a mai dátummal a fájl nevében. Természetesen tömöríti  a mentést, hiszen nem szabad a háttértárat pazarolni.
Mint látható minden adatbázist lement, kivéve egyet, az information_schema nevűt. Ez ugyanis nem tartalmaz olyan adatot, ami máshol ne lenne elérhető, MySQL metaadatokat tartalmaz.


Következzen maga a MySQL mentést végző szkript:
#!/bin/bash
MAINAP=`date +"%Y-%m-%d"`
REGINAP=`date --date='14 day ago' +"%Y-%m-%d"`
MYCONFIG=" --defaults-file=/etc/mysql/debian.cnf "
MYCONFIG_BACKUP=" --defaults-file=/etc/mysql/debian.cnf --opt -Q  -B "
DIRECTORY=/var/backups
for DBTABLE in `mysql $MYCONFIG -e "show databases" | tail -n +2`
do
        if [ $DBTABLE != "information_schema" ]
        then
                if [ -f $DIRECTORY/mysql_dump.$DBTABLE.$REGINAP.bz2 ]
                then
                        rm $DIRECTORY/mysql_dump.$DBTABLE.$REGINAP.bz2
                fi
                if [ ! -f $DIRECTORY/mysql_dump.$DBTABLE.$MAINAP.bz2 ]
                then
                        mysqldump $
MYCONFIG_BACKUP $DBTABLE -e | bzip2 > $DIRECTORY/mysql_dump.$DBTABLE.$MAINAP.bz2
                fi
        fi
done

Remélem tetszett
Kulcsszavak: Linux, backup, mentés, script, MySQL, Cron
Új hozzászólás:
Név:
Üzenet:
Mennyi kilenc és öt összege számmal írva?

Az üzenet mező kitöltése kötelező!