Lekce 5 - MySQL krok za krokem - Import
V minulé lekci, MySQL krok za krokem - Export, jsme si ukázali různé typy exportů databáze.
V dnešním MySQL tutoriálu si ukážeme, jak do databáze importovat data z dříve vytvořené zálohy.
Import dat
V naší databázi máme z dřívějška tabulku uzivatele
s
několika záznamy. Nejdříve si ji tedy celou smažeme příkazem:
DROP TABLE `uzivatele`;
V databázi nyní nemáme žádnou tabulku. Pojďme si ji zpět importovat
včetně struktury i dat. V levém panelu klikneme na naší databázi,
databaze_pro_web
, do níž budeme chtít data importovat. Poté
otevřeme záložku Import v horní liště:
Klikneme na možnost Vybrat soubor a vybereme soubor, který chceme importovat. Pro nás to bude ten první vytvořený soubor, který jsme zkoušeli exportovat v lekci MySQL krok za krokem - Export. Ten je také k dispozici v archivu stávající lekce nebo si jej nejprve můžete vytvořit. V souboru je příkaz pro vytvoření tabulky i dat.
Při tvorbě zálohy jsme v nastavení upřesnili, že chceme
původní tabulku, pokud existuje, přepsat. Na začátku souboru tedy máme
také příkaz DROP TABLE
, který jsme spustili v úvodu.
Poté zkontrolujeme znakovou sadu souboru, zda je utf-8
:
Další položky v nabídce importu
Níže máme aktivovánu položku Povolit přerušení importu v případě, že skript pozná, že se blíží časový limit nastavený v PHP. Tu v našem případě můžeme nechat zapnutou, jelikož importujeme malý soubor. U větších databází by se však mohlo stát, že se nám do databáze importuje pouze polovina dat a druhá polovina nebude importována.
Dále v sekci Další možnosti máme aktivovanou kontrolu cizích klíčů. Při importu dat, kde máme vytvořené relace, tedy vztahy mezi tabulkami, využijeme tuto funkci poměrně často. O cizích klíčích si však povíme více jindy.
Následuje výběr formátu uložených dat, kde necháváme výchozí formát SQL jako u exportu.
Formátů pro export je více než pro import. Při tvorbě exportu tedy raději volíme formát, který se dá poté i importovat, nejlépe SQL.
Pokud máme vše nastaveno, klikneme na tlačítko Proveď. Zobrazí se nám zprávy o úspěšném importu:
Nyní máme v databázi data, která jsme zálohovali:
Zkusme si všechny uživatele smazat:
TRUNCATE TABLE `uzivatele`;
Tabulka je opět prázdná
Velké databáze
Někdy se může stát, že import bude neúspěšný. Velký soubor může
phpMyAdmin importovat například déle než 6 minut. Ve výchozím nastavení
PHP serveru je maximální čas vykonávaného skriptu omezen na 360 nebo 120
sekund. U větších databází bude proto import neúspěšný a my tuto
proměnnou musíme změnit, abychom databázi mohli importovat. Tato proměnná
se nazývá max_execution_time
.
Soubory exportů velkých databází bývají z tohoto důvodu rozděleny na strukturu, a poté na několik souborů s daty. My si však ukážeme, jak omezení trvání skriptu zvýšit, abychom mohli i větší soubory databází importovat.
Úprava nastavení PHP serveru
Jelikož ve cvičeních budeme importovat další databáze, je vhodné si
před importem databází proměnné správně nastavit. To můžeme udělat v
konfiguračním souboru php.ini
. Dostaneme se do něj jednoduše
přes XAMPP kliknutím na tlačítko Config na řádce modulu
Apache:
Klikneme na PHP (php.ini) a otevře se nám soubor, ve kterém změníme následujícím proměnným nastavíme tyto hodnoty:
max_execution_time = 0
,memory_limit = 1G
.
Pro rychlé hledání vyhledání fráze použijeme klávesovou zkratku CTRL+F a do otevřeného okna zadáme hledaný výraz.
Hodnota 0
u proměnné max_execution_time
změní
trvání skriptu na neomezenou dobu. Proměnnou memory_limit si
nastavíme alespoň na hodnotu 1G
(1GB).
Úprava nastavení MySQL serveru
Dalším problémem je chyba max_allowed_packet
, díky kterému
se náš import nemusí provést. Proto si ještě upravíme soubor
my.ini
. Ten otevřeme kliknutím na tlačítko Config u
modulu MySQL:
Zde nastavíme proměnnou max_allowed_packet
na 1G
.
Tato proměnná musí být pod hlavičkou [mysqldump]
, je to
většinou ten druhý nález v souboru. Upravený soubor uložíme.
Po těchto změnách musíme restartovat službu Apache a MySQL. Klikneme na Stop v rozhraní XAMPP a poté na Start pro zapnutí.
Rozdělení importu do více příkazů
Pokud se i přes upravené nastavení serverů import stále nedaří
provést, můžeme si soubor se zálohou otevřít v poznámkovém bloku. U
příkazů pro vkládání dat zkontrolujeme počet záznamů (neboli počet
řádků) na jeden takový příkaz INSERT
. Pokud totiž
importujeme dlouhý příkaz, který má například přidat najednou 10 000
záznamů, často tato operace selže. Je dobré takový příkaz rozdělit na
několik dílčích příkazů.
Máme-li tedy příkaz INSERT
, který přidává najednou 10 000
záznamů, rozdělíme ho na 10 příkazů po 1000 záznamech:
INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES (1, '3269_J', 'Brašna Karya ultra 566 yellow', '849.0'), (2, '1403_I', 'Brašna Karya medium 960 black', '899.0'), (3, '1059_N', 'Brašna Karya medium 283 black', '899.0'), (4, '3623_T', 'Brašna Karya small 245 blue', '899.0'), (5, '2867_W', 'Brašna A-ELITA', '999.0'), /* zde by bylo dalších 838 záznamů */ (843, '1741740', 'Fritéza Moulinex LV-839WF, růžová', '2849.0'), (844, '1695207', 'Fritéza Moulinex LH-319KJ, stříbrná', '3149.0'), (845, '2787965', 'Fritéza Moulinex MQ-768LA, černá', '2699.0'), (846, '2618863', 'Fritéza Moulinex LQ-998AZ, žlutá', '2699.0'); /* další příkaz INSERT */ INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES (847, '1500603', 'Fritéza KITFORT', '2699.0'), (848, '2792623', 'Medium Fritéza Gorenje talent gradient silver', '3149.0'), (849, '2248192', 'Fritéza UNIT sky', '2549.0'), (850, '2379065', 'Fritéza UNIT sun', '3149.0'), /* dalších 794 záznamů */ (1645, '802964_O', 'Big Stolní počítač JBL l6 sensitive bright yellow', '17999.0'), (1646, '801345_X', 'Stolní počítač Cnd DX-514DC, hnědá', '17999.0'), (1647, '803198_A', 'Stolní počítač Cnd RD-509UV, červená', '17999.0'); /* další příkaz INSERT */ INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES (1648, '800672_T', 'Stolní počítač Cnd BK-539CL, žlutá', '19999.0'), (1649, '800854_G', 'Stolní počítač Cnd KS-374ZB, žlutá', '20999.0'), /* ... */
Tento způsob zrychlí proces importování dat.
Při exportu phpMyAdmin tuto metodu automaticky využívá, pokud však máme databázi od někoho jiného nebo ji třeba generujeme nějakým skriptem, je vhodné se na tento soubor podívat a případně ho upravit.
V následujícím kvízu, Kvíz - Tvorba, mazání, vkládání, import a export dat v MySQL, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 792x (1.37 kB)
Aplikace je včetně zdrojových kódů v jazyce MySQL