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, CronPersze 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
