Nagyméretű MySQL adatbázisok importja/exportja

gergely képe

Amikor MySQL adatbázissal dolgozok akkor általában phpMyAdmint használok, ami egy nagyon szép és egyszerű felület az adatbázis adminisztrálására. Néha sajnos az adatbázis túl nagy ahhoz, hogy phpMyAdmint használjunk, mert például kifut a php futási idejéből és nem csinálja meg a kért exportálást vagy importálást, ezért néha a parancssorhoz kell nyúlnom.

Tehát ebben az írásban ismertetni szeretnék néhány lehetőséget, hogyan is lehet ezt megejteni a konzolból.
A következő néhány sorban a [Felhasználónév] helyére a MySQL adatbázis felhasználóneve, a [ABnév] az adatbázis neve, a [/útvonal_a_fájlhoz/ABnév] az útvonal a kiexportált adatbázis fájlhoz - angolul dump - és végül a [/útvonal_a_mysqlhez/] az útvonal a MySQLhez (ez pl. Mac-en vagy Windows-on kell a parancssori parancsok kiadásához.)

Nagyméretű adatbázis másolása/exportálása

Először is a MySQLnek nincs másolás funkciója. Úgy lehet másolatot készíteni, hogy kiexportáljuk az adatbázist a mysqldump paranccsal. Hogy kiexportáljuk az adatbázist és egyből gzippel tömörítsük is használjuk a következő parancsot. Kérni fogja futás előtt a jelszavunkat.

mysqldump -u [Felhasználónév] -p [ABnév] | gzip > [/útvonal_a_fájlhoz/ABnév].sql.gz

Nagyméretű adatbázis importálása

Ha vissza akarjuk állítani az előbbi módon exportált adatokat a rendszerbe a következőt kell tennünk.
Először csomagoljuk ki a fájlt:

gzip -d [/útvonal_a_fájlhoz/ABnév].sql.gz

Lépjünk be a MySQLbe (megint kérni fogja a jelszavunkat):

[/útvonal_a_mysqlhez/]mysql -u [Felhasználónév] -p

Utána a következőt kell tennünk, hogy kitöröljük az előző adatbázist és betöltsük a mentést. (Vigyázat adatvesztéshez vezethet!)

SHOW DATABASES;<br />DROP DATABASE [ABnév];<br />CREATE DATABASE [ABnév];<br />USE [ABnév];<br />SOURCE [/útvonal_a_fájlhoz/ABnév].sql;

Extra mentési funkciók

Van úgy, hogy például a keresés index táblája túl nagyra nő, így azt nem szeretnénk exportálni:

mysqldump -u [Felhasználónév] -p [ABnév] --ignore-table=[ABnév].search_index | gzip &gt; [/útvonal_a_fájlhoz/ABnév].sql.gz

Egyébként nagyon sok tábla van amit érdemes kihagyni, ezek a következők: watchdog, sessions és az összes cache* tábla.
Viszont, ha fenti példát használjuk a visszatöltésnél akkor hiányozni fognak a kihagyott táblák, így inkább ezt a két lépést használjuk ez esetben:

Először is akkor csináljunk mentést az adatbázisról az adatok nélkül, csak a szerkezetről:

mysqldump -u [Felhasználónév] -p [ABnév] --no-data | gzip &gt; [/útvonal_a_fájlhoz/ABnév].info.sql.gz

Ezután készítsük el a mentést csak azokról adatokról amelyek kellenek:

[/útvonal_a_mysqlhez/]mysqldump -u [Felhasználónév] -p [ABnév]  --no-create-info --ignore-table=[ABnév].search_index --ignore-table=[ABnév].cache --ignore-table=[ABnév].cache_block --ignore-table=[ABnév].cache_content --ignore-table=[ABnév].cache_filter --ignore-table=[ABnév].cache_form --ignore-table=[ABnév].cache_menu --ignore-table=[ABnév].cache_mollom --ignore-table=[ABnév].cache_page --ignore-table=[ABnév].cache_pathdst --ignore-table=[ABnév].cache_pathsrc --ignore-table=[ABnév].cache_views | gzip &gt; [/útvonal_a_fájlhoz/ABnév].data.sql.gz;

Nem lenne egyszerűbb minden egyes cache_ helyett helyettesítő karaktert használni? Dehogynem! Lássuk:

[/útvonal_a_mysqlhez/]mysqldump -u [Felhasználónév] -p [ABnév]  --no-create-info --ignore-table=[ABnév].search_index --ignore-table=[ABnév].cache% | gzip &gt; [/útvonal_a_fájlhoz/ABnév].data.sql.gz;

Miután ezzel készen vagyunk a fenti módon behúzhatjuk az adatokat az adatbázisba először azt amelyik csak a táblaszerkezetet tartalmazza (.info.sql.gz), és utána az adatokat (.data.sql.gz). Ez azért jó mert egy relatíve kis adatbázist kell csak bevinni a rendszerbe.

A fenti helyettesítő karakteres megoldást eddig sehol nem láttam dokumentálva ezért nem biztos, hogy működni fog, próbáld ki!

Egyéb lehetőségek

Van keresztplatformos grafikai program a MySQL adminisztráláshoz:
http://dev.mysql.com/downloads/gui-tools/5.0.html

Van egy Drupal modul is amely ezt meg tudja tenni:
http://drupal.org/project/backup_migrate

Ez a bejegyzés egy ~fordítása egy a drupal.org/planet oldalon megjelent blogbejegyzésnek. Külön köszönet a fordításban nyújtott segítségért a #drupal.hu irc csatorna tagjainak.

Címkék: drupalmysql