IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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ě:

Otevření záložky pro import v phpMyAdmin - MySQL/MariaDB databáze krok za krokem

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:

Výběr souboru pro import - MySQL/MariaDB databáze krok za krokem

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:

Výpis informace o úspěšném importu - MySQL/MariaDB databáze krok za krokem

Nyní máme v databázi data, která jsme zálohovali:

Kontrola importovaných dat - MySQL/MariaDB databáze krok za krokem

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:

Otevření souboru php.ini v XAMMPu - MySQL/MariaDB databáze krok za krokem

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:

Otevření souboru my.ini v XAMMPu - MySQL/MariaDB databáze krok za krokem

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 726x (1.37 kB)
Aplikace je včetně zdrojových kódů v jazyce MySQL

 

Předchozí článek
MySQL krok za krokem - Export
Všechny články v sekci
MySQL/MariaDB databáze krok za krokem
Přeskočit článek
(nedoporučujeme)
Kvíz - Tvorba, mazání, vkládání, import a export dat v MySQL
Článek pro vás napsal Samuel Hél
Avatar
Uživatelské hodnocení:
510 hlasů
Autor se věnuje hlavně programování, nejvíce z oblasti webových technologií, dělá občasné video edity ze svých dovolených. Má rád memes, svou gf a elektroniku
Aktivity