Adatbázisok mentése
A mysqldump
egy rendkívül hasznos eszköz, amelyet a MySQL adatbázisok biztonsági mentésére használnak. Segítségével egyszerűen készíthetünk teljes adatbázis mentéseket, amelyek tartalmazzák a táblák szerkezetét, az adatokat, valamint az indexeket és más objektumokat. Azonban nem minden adatbázis objektumot ment el alapértelmezés szerint, és a tárolt eljárások (stored procedures) esetében is vannak speciális szabályok.
Mit ment el a mysqldump
?
- Tábla szerkezete: A
mysqldump
alapértelmezés szerint menti a táblák struktúráját, tehát a táblák oszlopait, azok típusait és egyéb attribútumokat (példáulNOT NULL
,AUTO_INCREMENT
stb.). - Adatok: A táblák adatainak mentése is megtörténik. Az adatok
INSERT INTO
parancsok formájában kerülnek elmentésre. - Indexek: A táblák indexei, például elsődleges kulcsok (
PRIMARY KEY
), egyedi kulcsok (UNIQUE
), valamint az idegen kulcsok (FOREIGN KEY
) szintén mentésre kerülnek. - Nézetek (Views): A
mysqldump
alapértelmezés szerint menti a nézeteket (views), tehát a táblák adataiból készült virtuális táblákat is elmenti. - Egyéb adatbázis objektumok: Az alapértelmezett mentés tartalmazza az adatbázis szintű beállításokat, mint például az adatbázisok, táblák, nézetek, indexek, trigger-ek (triggerek), készletek (sequences) és egyéb metaadatok.
Mit NEM ment el a mysqldump
?
Tárolt eljárások és függvények (Stored Procedures & Functions): A
mysqldump
nem menti el alapértelmezés szerint a tárolt eljárásokat (stored procedures) és függvényeket (stored functions). Az automatikus mentés ezeket nem tartalmazza jogosultság kezelési problémák és egyéb kompatibilitási problémák miatt, ezért mentésüket manuálisan kell elvégezni.A tárolt eljárások és függvények mentéséhez a
--routines
kapcsolót kell használni. Ezzel biztosítható, hogy amysqldump
mentse a tárolt eljárásokat és függvényeket is.- Események (Events): A
mysqldump
alapértelmezés szerint nem menti el az eseményeket (events), amelyek automatikusan végrehajtódó műveletek a MySQL-ben. Az események mentéséhez szintén a--events
kapcsolót kell használni. Felhasználók és jogosultságok: Alapértelmezés szerint a
mysqldump
nem menti a felhasználói fiókokat, azok jelszavait és jogosultságait. A felhasználói jogosultságok biztonsági mentéséhez a--all-databases
kapcsolót vagy amysql
adatbázist külön kell menteni, amely tartalmazza a felhasználókat és jogosultságokat.Nem táblázatos adatok: A
mysqldump
alapvetően a relációs táblákra koncentrál, tehát nem menti a nem relációs adatokat (például fájlokat, blobokat), ha azokat nem táblákban tárolják.
Miért nem menti el alapértelmezés szerint a tárolt eljárásokat?
A mysqldump
eszköz alapértelmezés szerint nem menti el a tárolt eljárásokat és függvényeket, mert azok az adatbázis logikájához és működéséhez tartoznak, nem pedig közvetlenül a táblákhoz. A mentés során figyelmet kell fordítani arra, hogy a tárolt eljárások működése sokszor adatbázis-specifikus lehet, és egy adatbázis másik példányában való visszaállításuk esetén külön figyelmet kell fordítani az esetleges változtatásokra.
További kapcsolók a mysqldump
eszközhöz
A mysqldump
eszköz különféle kapcsolókkal használható a mentés testreszabására. Íme néhány hasznos kapcsoló, amit használhatsz:
--all-databases
: Minden adatbázis mentése.--databases
: Több adatbázis mentése.--add-drop-database
: Az adatbázis törlését tartalmazó parancsot is generál a mentés előtt.--no-data
: Csak a tábla struktúráját mentesíti, adatokat nem.--single-transaction
: Ha az adatbázis tranzakció alapú (InnoDB), a mentést egyetlen tranzakcióval végezheti el, biztosítva az adatbázis állapotának konzisztenciáját a mentés közben.
Összegzés
A mysqldump
eszköz nem menti el alapértelmezés szerint a tárolt eljárásokat (stored procedures) és függvényeket (stored functions). Ha szükség van ezek mentésére, akkor a --routines
kapcsolót kell használni. Ezen kívül az események és a felhasználói jogosultságok sem kerülnek mentésre, ha azokat nem külön kezeljük. A mysqldump
eszközt testreszabhatjuk különböző kapcsolók használatával a kívánt adatok mentéséhez.