Tartalomjegyzék

Bevezetés

A MySQL egy nyílt forráskódú adatbázis kezelő rendszer (DBMS = database management system), ami sokféleképpen juthat el a felhasználókhoz, mégis leggyakrabban a LAMP Stack részeként telepítik. Az adatbázis rendszerét nagyon egyszerű használni, hordozható és megannyi alkalmazás esetében hihetetlenül hatékony. A MySQL gyakran egy központi adattárolóként használatos létfontosságú adatokat tároló rendszer, ezért az egyik legfontosabb megelőző lépés, amit egy rendszergazda tehet, az a rendszeres biztonsági mentés készítése az adatbázisról. Ez a cikk bemutat néhány különböző módszert a biztonsági mentések készítésére, illetve azok visszaállítására.

Először is szükségünk lesz egy MySQL adatbázisra. Minden konfigurációt a terminálban fogunk végrehajtani, ezért bizonyosodjunk meg róla, hogy SSH-n keresztül gyökérfelhasználóként jelentkeztünk be. Amennyiben Önnek még új a Linux szerverek adminisztrálása, úgy először ajánlatos az azokról szóló cikkeket elolvasni, és utána folytatni ezt a cikket.

A biztonsági mentések módszertana

A legtöbb itt bemutatott módszert a mysqldump eszköz segítségével hajtjuk végre, amely alapértelmezettként jár a MySQL szerver telepítéshez. Amikor csak lehetőség van rá, ajánlatos a mysqldump használata, mivel sok esetben ez a legegyszerűbb módszere a biztonsági mentés készítésének. A többi módszer arra az esetre szolgál, amikor nincs hozzáférésünk a mysqldump eszközhöz, mint például egy visszaállítási környezetben (pl. Finnix), vagy olyan szituációkban, ahol a MySQLhelyi példánya nem indítható el.

Ezeken felül a cikk egy rövid bemutatóként is szolgál a mysqldump eszközről, mivel nagyon sokféle felhasználási módja van, amelyek ezen cikk hatáskörén túlmutatnak. Javasoljuk, hogy sajátítsa el a cikk tartalmát, és utána folytassa a mysqldump felhasználási lehetőségeinek megismerését.

Fontos megjegyezni a következőket:

  • A mysqldump-pal létrehozott *.sql fájlokat bármikor visszaállíthatjuk. Még manuálisan is szerkeszthetjük az adatbázis sql fájljait (megfelelő odafigyeléssel!) a kedvenc szövegszerkesztőnk használatával.
  • Amennyiben az adatbázisunk csak a MyISAM tárolómotort használja, akkor helyettesíthetjük a mysqldump parancsot a gyorsabb mysqlhotcopy-ra.

Biztonsági mentés készítése a teljes adatbázis kezelő rendszerről (DBMS)

Számos esetben szükséges a teljes adatbázis kezelő rendszerről biztonsági mentést készítenünk az összes adatbázissal és táblával együtt, beleértve a rendszer adatbázisát, ami tartalmazza az engedélyezéseket és jelszavakat is.

Biztonsági mentés készítése a teljes adatbázis kezelő rendszerről mysqldump eszköz használatával

A legnyilvánvalóbb módszer egy egybefüggő biztonsági mentés készítésére a teljes MySQL adatbázis kezelő rendszerről a mysqldump eszköz.

Amennyiben a jelenlegi helyzetről kívánunk biztonsági mentést készíteni, akkor a parancssor a következő:

 mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -p

Ez a parancs jelszót fog kérni mielőtt elkezdődne a biztonsági mentés a jelenlegi könyvtárban. Ez a művelet néhány másodpercig, de akár órákig is tarthat, ez az adatbázis méretétől függ.

Automatizáljuk ezt a folyamatot úgy, hogy hozzáadjuk a következő sort a crontabhoz:

 0 1 * * * /usr/bin/mysqldump --all-databases > dump-$( date '+%Y-%m-%d_%H-%M-%S' ).sql -u root -pPASSWORD

A fenti példa esetében válasszuk ki a parancsnak megfelelő útvonalat, és cseréljük le a gyökérfelhasználót arra a mysql felhasználóra, akinek a nevében a mentést készíteni kívánjuk, és írjuk be a felhasználóhoz tartozó megfelelő jelszót.

Bizonyosodjunk meg arról, hogy nincs szóköz a -P jelző és a jelszó között.

Biztonsági mentés készítése a teljes adatbázis kezelő rendszerről a MySQL adatkönyvtár használatával

Habár a mysqldump eszköz használata az elfogadottabb módszer, van néhány eset, amikor egy másik irányból kell megközelítenünk a helyzetet. A mysqldump csak akkor működik, amikor az adatbázis szerver elérhető és fut. Amennyiben az adatbázis nem indítható el, vagy a hoszt rendszer nem elérhető, átmásolhatjuk a MySQL adatbázist közvetlenül.

Ez a módszer olyan esetekben szükséges, amikor a rendszerben csak egy visszaállítási környezethez férünk hozzá (Finnix). Ha ezzel a módszerrel próbálkozunk, bizonyosodjunk meg róla, hogy az adatbázis NEM fut. Írjuk be a következő parancsot:

 /etc/init.d/mysqld stop

A MySQL legtöbb disztribúciójában az adatkönyvtár a /var/lib/mysql/ könyvtárban található. Ha ez a könyvtár nem létezik, akkor az adatkönyvtár elérési útjának megtalálásához vizsgáljuk meg az /etc/mysql/my.cnf fájlt.

Másik megoldás, hogy rákereshetünk az adatkönyvtárra a fájlrendszerben a következő paranccsal:

 find / -name mysql

Amikor betöltöttük a MySQL adatkönyvtárat, átmásolhatjuk a biztonsági mentés helyszínére. A következő példa azt feltételezi, hogy az adatkönyvtár a /var/lib/mysql/ helyen van:

 cp -R /var/lib/mysql/* /opt/database/backup-1266871069/

Ebben az esetben rekurzívan másoltuk át az adatkönyvtár tartalmát (pl. /var/lib/mysql/ ) az /opt/ hierarchia könyvtárába (pl. /opt/database/backup-1266871069/). Ennek a könyvtárnak előzetesen léteznie kell már a művelet végrehajtása előtt.

A következő műveletsort kell végrehajtanunk:

1 /etc/init.d/mysql stop
2 mkdir -p /opt/database/backup-1266872202/
3 cp -R /var/lib/mysql/* /opt/database/backup-1266872202/ 

Ezek a parancsok a MySQL szerver daemonjának leállításával kezdődnek. Ezt követően létrehozunk egy /opt/database/backup-1266872202/ nevű könyvtárat, majd egy rekurzív másolatot az adatkönytárról. Jegyezzük meg, hogy a példában a biztonsági mentés idejét választottuk névnek!

Helyettesítsük a fenti elérési utat a nekünk megfelelő hellyel és névvel! A cp parancs nem állít elő outputot, illetve az adatbázis idejétől függően viszonylag sokáig tarthat, mire a parancsot végrehajtja, ezért ne ijedjünk meg, ha kicsit több ideig tart. Amikor a másolási folyamat befejeződik, ajánlatos archiválnunk az adatkönyvtárat egy „tar” archívumba, hogy egyszerűbbé tegyük a gépek közötti mozgást és vezérlést. Az archívum létrehozásához írjuk be a következő parancsot:

1 cd /opt/database/backup-1266872202
2 tar -czfv * > /opt/mysqlBackup-1266872202.tar.gz 

Amikor a tarball-t lértehoztuk, könnyen mozgathatjuk a fájlt a nekünk legmegfelelőbb módon. Ne felejtsük el a MySQL szerver daemonját újraindítani, amennyiben szükséges:

 /etc/init.d/mysql start

Biztonsági mentés egyedülálló adatbázisról

Gyakorta nincs szükség az egész adatbázis biztonsági mentésére. Néhány esetben, például egy webes alkalmazás frissítésekor, a telepítő lehet, hogy javasolni fogja, hogy készítsünk másolatot az adatbázisról, mert annak negatív hatása lehet az adatbázisra.

Ehhez hasonlóan, hogyha csak egy meghatározott adatbázisról akarunk másolatot készíteni, mert azt egy másik szerverre akarjuk áthelyezni, akkor is jó lehet ez a módszer.

Amikor tehetjük, használjuk a mysqldump eszközt az egyedülálló adatbázisról készült másolat exportálásához. Ezt a következő paranccsal tehetjük meg:

 mysqldump -u squire -ps3cr1t -h localhost danceLeaders > 1266861650-danceLeaders.sql

A fenti az előző részből vett példa, azzal a különbséggel, hogy az összes adatbázis helyett most egy meghatározott adatbázis névvel dolgozunk. A danceLeaders adatbázisról készítünk biztonsági mentést.

A nyers parancs a következő:

 mysqldump -u [username] -p[password] -h [host] [databaseName] > [backup-name].sql

Egy másik példában egy customer nevű adatbázisról készítünk biztonsági mentést az adatbázis gyökér felhasználójával.

A parancs a következő:

 mysqldump -u root -p -h localhost customer > customerBackup.sql

Mielőtt a mysqldump elkezdené a biztonsági mentést, előtte jelszót fog tőlünk kérni.

Mint mindig, itt is a customerBackup.sql abban a könyvtárban lesz létrehozva, ahol a parancsot végrehajtjuk. A hoszt terheltségétől és az adatbázis nagyságától függően mindössze néhány másodpercet vagy órákat is igénybe vehet a művelet végrehajtása.

Biztonsági mentés készítése egyedülálló tábláról

Biztonsági mentés készítése egyedülálló tábláról a mysqldump eszköz használatával

Ez a folyamat (a mysqldump eszköz előző használataihoz hasonlóan) lehetővé teszi egy egyedülálló adatbázis tábla biztonsági mentését. A következő példában bemutatjuk, hogy a danceLeaders adatbázison belül található squireRecords tábláról hogyan tudjuk biztonsági mentést készíteni.

 mysqldump -u squire -ps3cr1t -h localhost danceLeaders squireRecords \> 1266861650-danceLeaders-squireRecords.sql

A példa még mindig az előző példa folytatása, azonban most hozzáadtuk a tábla nevét a parancshoz, így meghatározva a menteni kívánt tábla nevét. Nyers formában a parancs a következő:

 mysqldump -u [username] -p[password] -h [host] [databaseName] [tableName] > [backup-name].sql

Egy plusz példában a gyökér adatbázis felhasználó segítségével az order nevű tábláról fogunk biztonsági másolatot készíteni, ami a customer nevezetű adatbázisban található.

A hozzá tartozó parancs pedig a következő:

 mysqldump -u root -p -h localhost customer order > customerBackup-order.sql

A folyamat megkezdése előtt a már megszokott módon be kell írnunk a jelszót, ezután a mysqldump megkezdheti a biztonsági mentés készítését. A biztonsági mentést tartalmazó fájl (ebben az esetben a customerBackup.sql) abba könyvtárba kerül, ahol a parancsot végrehajtottuk. A hoszt terheltségétől és az adatbázis nagyságától függően mindössze néhány másodpercet vagy órákat is igénybe vehet a művelet végrehajtása.

Biztonsági mentés készítése egyedülálló tábláról a MySQL Kliens eszköz és OUTFILE utasítás használatával

A MySQL kliensnek magának is van biztonsági mentés funkciója. Hasznos lehet, amikor már be vagyunk jelentkezve, és nem akarunk kilépni a már megkezdett munkafolyamatból.

Amennyiben élő rendszert használunk, és nem engedhetjük meg magunknak a leállást, úgy meg kell fontolnunk a biztonsági mentés idejére a tábla átmeneti zárolását.

Figyeljünk rá, hogy a MySQL kliens használatával készített egyedülálló tábláról készített biztonsági mentés esetében a tábla struktúrája a mentéssel elveszik. Ezzel a módszerrel csak az adatok maradnak meg.

Mielőtt elkezdenénk, javasoljuk a LOCK TABLES (táblák zárolása) parancs végrehajtását a releváns táblák esetében, majd a FLUSH TABLES (táblák kiírása) parancsot, hogy megbizonyosodjunk róla, hogy az adatbázis konzisztens marad a biztonsági mentés közben. Csak az olvasási zárra lesz most szükségünk. Ez lehetővé teszi a kliensek számára, hogy folytassák a táblák lekérdezését miközben mi másoljuk a fájlokat. Az olvasási zár esetében a parancs a következő:

 LOCK TABLES tableName READ;

Ahhoz, hogy a customer adatbázis order tábláját zároljuk, írjuk be a következő parancsot:

 mysql -u root -p -h localhost

Ezt követően a gyökérjelszót fogja tőlünk kérni. Miután beírtuk az adatbázishoz szükséges igazoló adatokat, a mysql kliens parancssorához érkezünk meg. Írjuk be a következő parancsot a customer adatbázisban lévő order tábla lezárásához (a nyomkövetés a MySQL parancsokhoz szükséges):

1 USE customer;
2 LOCK TABLES order READ;
3 FLUSH TABLES; 

Mostmár elkezdhetjük magát a biztonsági mentési folyamatot. Ahhoz, hogy egy egyedülálló táblát mentsünk le MySQL kliens használatával, ahhoz be kell, hogy legyünk jelentkezve a MySQL DBMSbe. Ha ezt még nem tettük meg, akkor most bejelentkezhetünk a következő paranccsal:

 mysql -u root -p -h localhost

A jelszót fogja kérni. Miután beírtuk a jelszót és a MySQL kliens parancsvezérlőjében vagyunk, kiválaszthatjuk a SELECT * INTO OUTFILE utasítást.

A parancs a következő:

 SELECT * INTO OUTFILE 'file_name' FROM tbl_name;

Ebben a példában a customer adatbázis order táblájáról fogunk biztonsági mentést készíteni. A biztonsági mentés elkezdéséhez írjuk be a következő parancsot (a nyomkövetés a MySQL parancsokhoz szükséges):

1 USE customer;
2 LOCK TABLES order READ;
3 FLUSH TABLES;
4 SELECT * INTO OUTFILE 'customerOrderBackup.sql' FROM order;
5 UNLOCK TABLES; 

A customerOrderBackup.sql fájl a megfelelő adat alkönyvtárban lesz a MySQL adatkönyvtáron belül. A MySQL adatkönyvtár általában /var/lib/mysql/. Ebben a példában az OUTFILE a /var/lib/mysql/customer/customerOrderBackup.sql lesz. Ez a helyszín azonban a Linux disztribúcióktól függően változhat. Ha nem találjuk a biztonsági mentést tartalmazó fájlt, akkor a következő paranccsal kereshetünk rá:

 find / -name customerOrderBackup.sql

Amennyiben a biztonsági mentést befejeztük, fel kell oldanunk a táblákat a következő paranccsal a MySQL kliensben. Ez vissza fogja állítani az adatbázisunkat a normális állapotba. Ha még nem tettük meg, akkor jelentkezzünk be az első paranccsal a MySQL kliensbe és hajtsuk végre a második parancsot:

1 mysql -uroot -p -h localhost
2
3 UNLOCK TABLES; 

Ettől a ponttól fogva már normál kerékvágás szerint használhatjuk az adatbázist.

Effektív biztonsági mentési stratégia kialakítása

A biztonsági mentés készítése a MySQL adatbázisról egy rendszeres, ütemezett feladat kell, hogy legyen. Ezt Cron, mysqldump és/vagy mail használatával tudjuk elvégezni. Egy automatizált biztonsági mentés használata segíthet a váratlan katasztrófahelyzetek esetén a leállás idejének csökkentésében.

Nem szükséges gyökérfelhasználóként bejelentkeznünk az adatbázisok biztonsági mentésekor. Egy MySQL felhasználó olvasói engedéllyel (kivéve a SELECT funkciót) képes a mysqldump és mysql (pl. MySQL Client) használatára, így biztonsági mentést készítve. Véleményünk szerint nem tanácsos a MySQL-t gyökérfelhasználóként használni, így ugyanis jelentősen csökkenthetjük a biztonsági kockázatokat.

Egy teljes DBMS visszaállítása biztonsági mentésből

Egy olyan mentés, amelyet nem lehet visszaállítani, nem sokat ér. Tanácsos a mentéseket meghatározott időközönként tesztelni, és megbizonyosodni róla, hogy egy esetleges visszaállítás esetén fel tudjuk-e használni őket.

A MySQL adatbázis biztonsági mentéseinek visszaállításakor a módszer, amit használnunk kell, az a mentéshez használt módszertől függ.

Egy teljes DBMS visszaállítása biztonsági mentésből MySQL kliens használatával és a mysqldump által létrehozott mentések segítségével

Mielőtt elkezdenénk a visszaállítást, fontos megemlítenünk, hogy jelen leírásban feltételezzük, hogy a rendszer egy újonnan telepített MySQL-t futtat létező adatbázisok vagy táblák nélkül. Amennyiben már vannak adatbázisok és táblák a MySQL DBMS-ben, készítsünk egy biztonsági mentést, mert ez a folyamat felül fogja írni a jelenlegi MySQL adatokat.

Könnyedén visszaállíthatjuk az egész DBMS-t a mysql parancs használatával. A teljes parancs így fog kinézni:

 mysql -u [username] -p [password] < backupFile.sql

Ebben az esetben az egész DBMS-t visszaállítjuk. A parancs a következőképp fog kinézni:

 mysql -u root -p < 1266861650-backup-all.sql

Ezt követően a MySQL gyökérfelhasználójának jelszavát kell megadnunk. Miután a hitelesítés megtörtént, az újraállítási folyamat elkezdődik. Mivel a folyamat az egész DBMS-t visszaállítja, így tovább is eltarthat a folyamat: néhány perctől pár óráig.

Egy teljes DBMS visszaállítása biztonsági mentésből közvetlenül a MySQL adatkönyvtárból másolt MySQL adatfájlok segítségével

Mielőtt elkezdenénk a visszaállítást, fontos megemlítenünk, hogy jelen leírásban feltételezzük, hogy a rendszer egy újonnan telepített MySQL-t futtat létező adatbázisok vagy táblák nélkül. Amennyiben már vannak adatbázisok és táblák a MySQL DBMS-ben, készítsünk egy biztonsági mentést, mert ez a folyamat felül fogja írni a jelenlegi MySQL adatokat.

Ha rendelkezünk a MySQL adatkönyvtárunk teljes biztonsági mentésével (általában /var/lib/mysql), akkor visszaállíthatjuk azt a parancssorral. Ahhoz, hogy megbizonyosodjunk arról, hogy a visszaállítás sikeres lesz, először állítsuk le a MySQL szerver daemonját és töröljük ki a jelenlegi tartalmat a MySQL adatkönyvtárból:

/etc/init.d/mysql stop 
rm -R /var/lib/mysql/*

A következő példában a MySQL adatkönyvtár biztonsági másolata a /opt/database/backup-1266872202 könyvtárban van. Amennyiben készítettünk már egy tarball-t az adatkönyvtárról a biztonsági mentés készítésekor, úgy ki kell csomagolnunk azokat a tarball-ból mielőtt átmásolnánk őket a következő paranccsal:

cp mysqlBackup-1266872202.tar.gz /var/lib/mysql/ 
cd /var/lib/mysql 
tar xzvf mysqlBackup-1266872202.tar.gz

Mielőtt újraindíthatnánk a MySQL adatbázis folyamatot, meg kell bizonyosodnunk róla, hogy az engedélyek megfelelően vannak beállítva a /var/lib/mysql/ könyvtárban. Ebben a példában azt feltételezzük, hogy a MySQL szerver daemonja úgy fut, mint a mysql felhasználó a mysql csoporttal. Ahhoz, hogy megváltoztassuk az adatkönyvtárhoz tartozó engedélyeket, írjuk be a következő parancsot:

chown -R mysql:mysql /var/lib/mysql

Változtassuk meg a mysql:mysql arányát ennek a parancsnak, hogyha a MySQL példányunk különböző felhasználókkal és csoport engedélyekkel rendelkezik. Ennek az argumentumnak a formátuma [user]:[group]. Most már elindíthatjuk a MySQL szerver daemonját a következő paranccsal:

 /etc/init.d/mysql start

Amennyiben egy ehhez hasonló hibaüzenetet kapunk:

1 /usr/bin/mysqladmin: connect to server at 'localhost' failed
2    error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)' 

A régi debian-sys-maint felhasználó jelszavát kell használnunk a /etc/mysql/debian.cnf -ben és utána kicserélni az új debian-sys-maint felhasználó jelszavára. A cat segítségével megnézhetjük a régi jelszót:

 cat /etc/mysql/debian.cnf | grep password

Másoljuk ki, vagy jegyezzük meg a jelszót. Utána át kell cserélnünk az új debian-sys-maint felhasználó jelszavára. Ezt megtehetjük úgy, hogy gyökérfelhasználóként jelentkezünk be a MySQL-be és a következő parancsot hajtjuk végre (ahol a <password> a régi debian-sys-maint jelszava):

 GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;

Ezt követően újra kell indítanunk a MySQL-t a következő paranccsal:

 /etc/init.d/mysql restart

Miután a MySQL szerver sikeresen elindult, tanácsos a MySQL DBMS letesztelése, meg kell bizonyosodnunk róla, hogy az adatbázisok és a táblák megfelelően lettek visszaállítva. Tanácsos a naplók auditálása, így kiszűrhetjük a lehetséges hibákat. Ugyanis néha a MySQL rendben elindul, még akkor is ha az adatbázisban hibák vannak.

Egyedülálló adatbázis visszaállítása biztonsági mentésből

Amennyiben csak egy adatbázishoz készítettünk biztonsági mentést, vagy csak egyetlen adatbázist kell visszaállítanunk, a visszaállítási folyamat egy kicsit eltér az előző pontban leírtaktól. Mielőtt elkezdenénk a visszaállítást, fontos megemlítenünk, hogy jelen leírásban feltételezzük, hogy a rendszer egy újonnan telepített MySQL-t futtat létező adatbázisok vagy táblák nélkül. Amennyiben már vannak adatbázisok és táblák a MySQL DBMS-ben, készítsünk egy biztonsági mentést, mert ez a folyamat felül fogja írni a jelenlegi MySQL adatokat. Ahhoz, hogy visszaállítsunk egy egyedülálló adatbázist a mysql parancs használatával, először készítsük el a célállomást. Jelentkezzünk be a MySQL adatbázisba az új MySQL kliens használatával:

 mysql -u root -p -h localhost

Ezt követően kérni fogja a MySQL gyökérfelhasználó jelszavát. Miután megadtuk a szükséges információkat, elő kell készítenünk egy célállomást. Ebben az esetben a customer adatbázist fogjuk visszaállítani.

 CREATE DATABASE customer;

Ahogy az összes MySQL utasításnál, itt sem szabad elhagynunk a pontosvesszőt a parancs végéről. A telepítésünktől függően lehet, hogy létre kell hoznunk egy új MySQL felhasználót, vagy egy régi felhasználó számára hozzáférést kell biztosítanunk az újonnan létrehozott adatbázisban. Az új MySQL felhasználó létrehozására szolgáló parancs:

 CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';

Ebben a példában létre fogunk hozni egy customeradmin nevű felhasználót:

 CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';

Most pedig jogosultságot adunk a customeradminnak, hogy elérhesse a custom adatbázist. Az adatbázishoz egy meghatározott felhasználó számára jogosultságot biztosító parancs:

 GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'

Példánkból fakadóan a következő lépésben a customeradmin számára teljes hozzáférést fogunk biztosítani a customer adatbázishoz. Végezzük el a parancsot a MySQL kliensben:

 GRANT ALL ON customer.* TO 'customeradmin'@'localhost';

Lehet, hogy a telepítésünk igényeinek megfelelően különböző hozzáféréseket meg kell pontosan határoznunk. Amennyiben a célállomás és a MySQL felhasználó is megvan, bezárhatjuk a MySQL klienst:

 quit

Így már használhatjuk a mysql parancsot az SQL fájl visszaállításához. Az ehhez tartozó parancs a következő:

 mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql

Ebben a példában a customer adatbázist fogjuk visszaállítani egy SQL biztonsági mentési fájlból, aminek customerBackup.sql a neve (figyeljünk oda a < szimbólumra ennél a parancsnál):

 mysql -u root -p -h localhost customer < customerBackup.sql

Írjuk be a MySQL gyökérfelhasználójának jelszavát. Ezt követően a visszaállítási folyamat megkezdődik. A hoszt terheltségétől és az adatbázis nagyságától függően mindössze néhány másodpercet vagy órákat is igénybe vehet a művelet végrehajtása.

Egyedülálló tábla visszaállítása biztonsági mentésből

Egyedülálló tábla visszaállítása biztonsági mentésből MySQL használatával és a mysqldump által létrehozott mentések segítségével

Mielőtt elkezdenénk a visszaállítási folyamatot, feltételezzük, hogy a használt MySQL példány már rendelkezik egy olyan adatbázissal, amely képes befogadni a visszaállítani kívánt táblát.

Amennyiben ez nem áll fenn, akkor először létre kell azt hoznunk. Jelentkezzünk be a MySQL-be a következő paranccsal:

 mysql -u root -p -h localhost

Adjuk meg a gyökérfelhasználó jelszavát. Miután ezzel megvagyunk, létre kell hoznunk a cél adatbázist. Jelen példában létre fogjuk hozni a customer adatbázist és kilépünk a mysql parancsvezérlőből a következő parancsokkal:

1 CREATE DATABASE customer;
2 quit 

Amennyiben már rendelkezünk a megfelelő adatbázissal, akkor a fenti lépést nyugodtan kihagyhatjuk. A tábla visszaállításához írjuk be a következő parancsot:

 mysql -u [username] -p[password] -h [host] [databaseName] < [filename].sql

Ebben a példában az order táblát fogjuk visszaállítani egy létező customer adatbázisba egy SQL biztonsági mentésből, amelynek a neve customerOderBackup.sql. Vigyázzunk, hogy ne felejtsük el használni a < szimbólumot a parancsban:

 mysql -u root -p -h localhost customer < customerOrderBackup.sql

Adjuk meg a gyökérfelhasználó jelszavát. Miután ezzel megvagyunk, kezdetét veszi a visszaállítási folyamat. A hoszt terheltségétől és a tábla nagyságától függően mindössze néhány másodpercet vagy órákat is igénybe vehet a művelet végrehajtása.

Egyedülálló tábla visszaállítása OUTFILE-lal létrehozott biztonsági mentések segítségével a MySQL Client eszköz és INFILE utasítás használatával

Mielőtt elkezdenénk a visszaállítási folyamatot, feltételezzük, hogy a használt MySQL példány már rendelkezik egy olyan adatbázissal, amely képes befogadni a visszaállítani kívánt táblát.

Amennyiben ez nem áll fenn, akkor először létre kell azt hoznunk. Jelentkezzünk be a MySQL-be a következő paranccsal:

 mysql -u root -p -h localhost

Adjuk meg a gyökérfelhasználó jelszavát. Miután ezzel megvagyunk, létre kell hoznunk a cél adatbázist. Jelen példában létre fogjuk hozni a customer adatbázist és kilépünk a mysql parancsvezérlőből a következő parancsokkal:

1 CREATE DATABASE customer;
2    quit 

Az itt felhasznált biztonsági mentett adatokat a SELECT * INTO OUTFILE ‘backupFile.sql’ FROM tableName parancsokkal hoztuk létre. Ez a fajta biztonsági mentés csak az adatot magát őrzi meg, a tábla struktúráját újra kell alkotnunk. Ahhoz, hogy egy egyedülálló táblát állítsunk vissza egy MySQL kliensen belül, először elő kell készítenünk a cél adatbázist és táblát.

Jelentkezzünk be a MySQL kliens használatával:

 mysql -u root -p -h localhost

Adjuk meg a gyökérfelhasználó jelszavát. Miután ezzel megvagyunk, létre kell hoznunk a cél adatbázist. Jelen példában létre fogjuk hozni a customer adatbázist:

 CREATE DATABASE customer;

Ne felejtsük el a pontosvesszőt minden kijelentés után kiírni.

Most pedig létre kell hoznunk egy céltáblát a megfelelő struktúrával. A táblában található mezők formátumainak tükrözniük kell annak a táblának a tulajdonságait, amelyikből a biztonsági mentés készült. Ebben a példában a customer adatbázisban található order táblát fogjuk visszaállítani. 2 mező található az order táblában: a custNum (INT adattípussal) és orderName (VARCHAR(20) adattípussal). A tábla felépítése más lesz:

1 USE customer;
2 CREATE TABLE order (custNum INT, orderName VARCHAR(20)); 

A telepítésünktől függően, lehet, hogy szükségünk lesz egy új MySQL felhasználó létrehozására, vagy egy régi felhasználó hozzáférésének módosítására (hogy hozzáférhessen az újonnan létrehozott adatbázishoz). Az új MySQL felhasználót létrehozó parancs:

 CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';

A következő példában egy új, customeradmin nevű felhasználót fogunk létrehozni:

 CREATE USER 'customeradmin'@'localhost' IDENTIFIED BY 's3cr1t';

A következő lépésben jogosultságot adunk a customeradminnak, hogy elérhesse a customer adatbázist. A parancs, amely lehetővé teszi, hogy adatbázishoz tartozó jogosultságokat adjunk különböző felhasználóknak a következőképpen néz ki:

 GRANT [privilegeType] ON [databaseName].[tableName] TO '[username]'@'[host]'

A következő példában teljes hozzáférést fogunk biztosítani a customeradmin számára a customer adatbázishoz:

 GRANT ALL ON customer.* TO 'customeradmin'@'localhost';

Amikor a felhasználó és a tábla is létre lett hozva, importálhatjuk a biztonsági mentés tartalmát a LOAD DATA paranccsal. A szintaxis így néz ki:

 LOAD DATA INFILE '[filename]' INTO TABLE [tableName];

A következőkben egy customerOrderBackup.sql nevű tábla adatait fogjuk visszaállítani. Amikor az INFILE után megadjuk az elérési utat és a fájlnevet a MySQL kliensben, az a MySQL adatkönyvtárban utána néz az adott fájlnak. Amennyiben a customerOrderBackup.sql fájlnév volt megadva, a hozzá tartozó elérési út /var/lib/mysql/customerOrderBackup.sql. Bizonyosodjunk meg róla, hogy létező tartalmakat próbálunk visszaállítani, különösen akkor, ha a MySQL File not found (fájl nem található) hibákat jelez.

Ahhoz, hogy a /var/lib/mysql/ helyen található customerOrderBackup.sql fájl adatait importálhassuk, a következő parancsra lesz szükségünk:

 LOAD DATA INFILE 'customerOrderBackup.sql' INTO TABLE order;

A hoszt terheltségétől és a tábla nagyságától függően mindössze néhány másodpercet vagy órákat is igénybe vehet a művelet végrehajtása.

Miután megbizonyosodtunk róla, hogy a tartalom megfelelően importálva lett, kijelentkezhetünk:

 quit