Biztonsági mentés phpMyAdmin-nal

Téma: biztonsági mentés majd visszaállítás phpMyAdmin segítségével, illetve a 2004. júliusában a leírás kiegészült az aktuális – 2.5.7-es verzió – telepítésével.

A phpMyAdmin egy webes kezelőfelület az SQL típusú adatbázisok kezeléséhez. Lehet vele menteni, visszaállítani, új táblázat létrehozni, már meglévőeket javítani, optimalizálni, módosítani stb.. Ahol SQL szolgáltatást adnak, ott általában ez a phpMyAdmin is rendelkezésre áll (pl. SRV.hu, UW.hu stb.)

Honlapja, ahonnan le tudod tölteni, illetve a teljes dokumentációt eléred:

http://www.phpmyadmin.net

A letöltött csomagban van egy Documentation.txt, melyben a teljes telepítési leírás is megtalálható angol nyelven (ha saját magadnak akarsz feltenni egyet).

Mentés

figyelem: ez a tutorial a phpMyAdmin 2.3.2-re épül, viszont egy frissítést követően a végén már 2.5.7-es verzió telepítését és beállítását tartalmazza. A kezelőfelület akár verziónként is módosulhat, de az itt leírt alapok nem változnak.

Először is nyisd meg a böngésződben a bejelentkezési oldalt, írd be a nevedet és jelszavadat, hogy hozzáférj az adatbázis(ai)dhoz. A bal oldalon egy legördülő menü látható, ott tudsz váltani az adatbázisok között (ingyenes tárhelyeken itt általában 1 van, azzal a névvel amin regisztráltad magad a tárhelyen).

A felső részen kell látnod egy “Export” lehetőséget, kattints rá.

Megjelenik az “Export” rész tartalma. Egy legördülő menüben, ahol alapban több elem is látszódik, ki tudod választani mely táblákat akarod menteni. Ha egyet sem választasz ki, vagy ha pont fordítva – mindet kiválasztod (Select All), akkor az egész adatbázisod mentésre kerül.

Tőle jobbra válaszd ki a “Structure and data” opciót, ezzel az egész szerkezetet és az adatokat is mented. Alatta válaszd ki ezeket:

  • Add ‘drop table’
  • Complete inserts
  • Extended inserts
  • Enclose table and field names with backquotes
  • Save as file

A “zipped” vagy “gzipped” opcióval tömörítheted a mentést, de ez néha okozhat problémát, így én ezek használatát nem javaslom.

Ha mindent beállítottál, kattints a “Go”-ra. Felugrik egy mentés ablak, válaszd ki hova akarod letölteni a “*.sql” fájlodat, majd menet a letöltés.

Visszaállítás

A már fentebb is ismertetett módon nyisd meg a phpMyAdmin-t, neved/jelszavad beírása után lépj be.

A bal oldalon látható legördülő menüben válaszd ki a visszaállítandó adatbázist.

Tőle jobbra fent, válaszd ki az “SQL” fület.

Kicsit lentebb látsz egy “Browse…” gombot (Tallózás…), kattints rá. A megjelenő ablakban keresd meg a előzőleg lementett “*.sql” fájlodat, majd válaszd ki. Ha megvan, kattints a “Go” gombra.

Ha semmi hibaüzenetet nem kapsz, sikerült a visszaállítás.

Az SQL backup fájl mérete nagyobb mint 1MB

A biztonsági mentésed (*.sql”) mérete nagyobb mint 1MB, adódhatnak kisebb problémák. A legtöbb szolgáltató esetében van egy bizonyos fájlméret korlátozás, mikor nem tudsz XY méretnél nagyobb fájlt feltölteni. Ez lehet 1MB, vagy 2MB esetleg nagyobb is, de ez már ritka.

Ilyenkor egyik lehetséges megoldás, hogy feltöltöd FTP-n a fájlt, majd írsz a szolgáltatónak egy mail-t, hogy tegyék fel helyetted. Ez persze valószínűleg a lassabb megoldás, már ha egyeltalán megcsinálják, és túl sokszor nem is lehet megjátszani. :)

A másik megoldás, hogy szétdarabolod a mentést kisebb egységekre, majd azokat töltöd fel a megfelelő sorrendben. Ehhez először is kell egy jó texteditor, ami kezeli a nagyobb fájlokat is, pl. NoteTab Light, EditPlus, UltraEdit stb…

Ha megnézed az “*.sql” mentés tartalmát, láthatod, hogy szinte minden sor végén egy pontosvessző található (;). Ezeknél a pontosvesszőknél lehet szétvágni a mentést több kisebb darabra. Arra figyelj, hogy a daraboknak vmi “értelmes” nevet addj, esetleg számozd be őket, hogy feltöltéskor meg tudd tartani a helyes sorrendet.

Ha a feltöltés vmi oknál fogva még így sem menne, akkor tedd a szövegeket a “Run SQL query/queries on database” szövegbox-ba, és utána kattints a “Go” gombra.

Akik nem szeretnék a szétvágást “manuálisan” megcsinálni, van egy kis program ami elvileg jó (elvileg, mert nem próbáltam), kipróbálás csak saját felelősségre!

rfsplitter.zip

Illetve itt egy másik daraboló program, a MakeChunks, amit phpBB fórum mentés/visszaállítás kapcsán találtam. Ez 500kb-os darabokra vágja a fájlt, majd besorszámozza a helyes feltöltés érdekében.

makechunks

Saját phpmyadmin telepítése

Ha a szerveren lévő phpmyadmin nem felel meg a számodra, töltsd le honlapjáról a legújabb stable verziót (ez jelen esetben a phpMyAdmin-2.5.7-pl1.zip). Amiért én ezt a megoldást szeretem: ha saját magamnak telepítem az admint, be tudom állítani hogy a szerverre készítse a biztonsági másolatokat, így sokkal gyorsabban megvagyok a napi mentésekkel, mintha minden egyes esetben meg kellene várnom, hogy letöltődjenek a gépre.

Maga a telepítés nagyon egyszerű, csak ki kell csomagolni a letöltött fájlt és a tartalmát feltölteni egy tetszőleges könyvtárba. A feltöltött könyvtár gyökerében keresd meg a config.inc.php-t és nyisd meg szerkesztésre, az alábbi részeket módosítsd (csak javaslat, én ezeket szoktam)

47. sor

$cfg['PmaAbsoluteUri_DisableWarning'] = FALSE;

javítsd át erre

$cfg['PmaAbsoluteUri_DisableWarning'] = TRUE;

60. sor

$cfg['blowfish_secret'] = '';

írj be vmi tetszőleges szöveget, én min 8 karaktert szoktam, kis- és nagybetűk illetve számok váltakoznak. Pl.:

$cfg['blowfish_secret'] = 'ZimbabW4eHuuDeME8legheLy';

82. sor

$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?

én ezt módosítani szoktam cookie alapúra, hogy a a nevet és jelszót megkérdezze

cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)?

A következő rész arra vonatkozik, hogy az admin felületen az export-t választva milyen opcióid legyenek

295-305. sor

/**
* Export defaults
*/ 
 
$cfg['Export']['format'] = 'sql'; // sql/latex/excel/csv/xml
$cfg['Export']['compression'] = 'none'; // none/zip/gzip/bzip2
 
$cfg['Export']['asfile'] = FALSE;
$cfg['Export']['onserver'] = FALSE;
$cfg['Export']['onserver_overwrite'] = FALSE;
$cfg['Export']['remember_file_template'] = TRUE;

Én általában így állítom be:

/**
* Export defaults
*/ 
 
$cfg['Export']['format'] = 'sql'; // sql/latex/excel/csv/xml
$cfg['Export']['compression'] = 'none'; // none/zip/gzip/bzip2
 
$cfg['Export']['asfile'] = TRUE;
$cfg['Export']['onserver'] = TRUE;
$cfg['Export']['onserver_overwrite'] = FALSE;
$cfg['Export']['remember_file_template'] = TRUE;

Az onserver_overwrite-t azért nem teszem TRUE-ra, mert a fájlokat nem felüliratni szoktam, hanem dátummal ellátva mindig megtartom őket egy X ideig visszamenőleg.

A következő részlet azokat a beállításokat tartalmazza, hogy a szerveren hova mentse az sql fájlokat, illetve honnan tudja beolvasni a phpyadmin a szerverre már előre feltöltött fájlokat, ha egy visszaállítást akarsz csinálni. A könyvtárak neve tetszőlegesen választható, de a CHMOD-t írhatóra kell tenni, ezt nehogy elfelejtsd. Amit a UploadDir könyvtárába teszel majd, az meg fog jelenni a phpmyadmin-ban az “SQL” fülre kattintva, ahol is a “browse” gomb segítségével eredetileg a gépeden lévő sql fájlokat lehetne feltölteni.

523-534. sor

/**
* Webserver upload/save/import directories
*/
$cfg['UploadDir'] = ''; // Directory for uploaded files that can be executed by
// phpMyAdmin. For example './upload'. Leave empty for
// no upload directory support
$cfg['SaveDir'] = ''; // Directory where phpMyAdmin can save exported data on
// server. For example './save'. Leave empty for no save
// directory support.
$cfg['docSQLDir'] = ''; // Directory for docSQL imports, phpMyAdmin can import
// docSQL files from that directory. For example
// './docSQL'. Leave empty for no docSQL import support.

Valami ilyesmire módosítsd

/**
* Webserver upload/save/import directories
*/
$cfg['UploadDir'] = './feltoltomgyorsan; // Directory for uploaded files that can be executed by
// phpMyAdmin. For example './upload'. Leave empty for
// no upload directory support
$cfg['SaveDir'] = './bombabiztosmentes'; // Directory where phpMyAdmin can save exported data on
// server. For example './save'. Leave empty for no save
// directory support.
$cfg['docSQLDir'] = ''; // Directory for docSQL imports, phpMyAdmin can import
// docSQL files from that directory. For example
// './docSQL'. Leave empty for no docSQL import support.

Azt csak tippként mondom, hogy ha egy ilyen scriptben vmi magyarázatban van egy minta, hogy mit hogy nevezz el, szerintem ne a default értékeket add meg automatikusan, inkább válassz egy egyéni, csak általad ismert megnevezést. Pl. ezt az egész “saját phpmyadmin” dolgot felteheted default módon is, ilyesmi elérésékkel:

szerverneve.hu/phpmyadmin/ // itt érhető el maga felület

szerverneve.hu/phpmyadmin/upload/ // itt lennének elérhetőek a feltöltésre váró fájlok

szerverneve.hu/phpmyadmin/save/ // ide mentődnének az sql fájlok

Ehelyett én mindig azt szoktam javasolni, válassz egyéni könyvtárneveket, nehezítsd meg a rossz szándékú és kutakodó userek dolgát :) Pl. a fenti megoldás helyett válassz vmi ilyesmit

szerverneve.hu/php57my75ad1min/ // itt érhető el maga felület

szerverneve.hu/php57my75ad1min/feltoltomgyorsan/ // itt lennének elérhetőek a feltöltésre váró fájlok

szerverneve.hu/php57my75ad1min/bombabiztosmentes/ // ide mentődnének az sql fájlok

Az ilyen elérési útvonalakat már ember legyen a talpán aki kitalálja. ;) Az már csak ráadás, hogy szerveroldali .htaccess védelemmel is el szoktam látni az ilyen jellegű könyvtárakat, szerintem az a pár másodperc plusz, amivel tovább tart a belépés bőven megéri a nagyobb biztonságért cserébe.

5 HOZZÁSZÓLÁS

  1. Helló!

    Azt szeretném megtudni, hogy a phpmyadmin sql dump-jához hasonlót (ugyanolyat) php-vel hogy lehet készíteni? van erre vkinek megoldása?

    Köszi előre is!

    (e-mailben írj pls: sqldump@orseolo.hu)

  2. Nekem így hirtelen lenne egy ötletem elméleti szinten. (De a gyakorlatban is ezt az elvet kell felhasználni/követni)
    A “mysql_list_dbs” függvénnyel kilistáztatod az adatbázisokat, majd a “mysql_list_tables” segítségével kilistáztatod a táblák neveit. Ha eddig megvagy, akkor kilistáztatod a táblák mezőinek a neveit a “mysql_list_fields” segítségével, majd lekérdezed a mezők paramétereit a “mysql_field_type”-al.

    A fenti lépéseket ha megcsinálod, akkor az adatbázisod szerkezete már megvan (esetleg a mezők falg-jeit lekérdezheted a “mysql_field_flags” függvénnyel még), amit a megfelelő “töltelék szöveg” segítségével kiírsz egy txt fájl-ba. Ezek után már csak az adatbázis adatait kell lekérdezned, amit hozzáírsz a fájl tartalmához és kész :)

    De javaslom, hogy nézd át azokat a függvényeket, amik ezen az oldalon vannak: http://hu2.php.net/mysql

  3. […] üzemeltetsz – akkor szükség van ezeknek az átmozgatására is. A legtöbb helyen az exportálás könnyen elvégezhető, mert a szolgáltató támogat (egyes esetekben előre telepít) valamilyen […]

  4. Szia!

    Nekem ezt dobja ki mikor akarom importálni a lementett sql fájlomt. Mi lehet a gond?

    Hiba
    SQL-lekérdezés:


    — A tábla adatainak kiíratása `wp_comments`

    INSERT INTO `wp_comments` ( `comment_ID` , `comment_post_ID` , `comment_author` , `comment_author_email` , `comment_author_url` , `comment_author_IP` , `comment_date` , `comment_date_gmt` , `comment_content` , `comment_karma` , `comment_approved` , `comment_agent` , `comment_type` , `comment_parent` , `user_id` )
    VALUES ( 1, 1, ‘WordPress Magyarország’, ”, ‘http://wordpress.org/’, ”, ‘2011-05-09 18:51:12’, ‘2011-05-09 18:51:12’, ‘Ez egy (az első) hozzászólás.A hozzászólás szerkesztéséhez vagy törléséhez be kell jelentkezni, majd a kívánt műveletet elvégezni.’, 0, ‘post-trashed’, ”, ”, 0, 0 ) ;

    A MySQL mondta:

    #1062 – Duplicate entry ‘1’ for key 1

  5. Tárgytalan, mert közbe rájöttem hogy elöszőr törölni kell az összes mappát az adatbázisban és utána tudom csak importálni az sql fájlt. Biztos sok kezdő beleesett ebbe a hibába már.

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét