Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij podzimní akce 30% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se JavaScript
JavaScript týden

Lekce 5 - MySQL krok za krokem: Import

V minulé lekci, Řešené úlohy k 1.-5. lekci MySQL/MariaDB, jsme si ukázali různé typy exportů databáze.

Dnes si vytvořenou zálohu tabulky (export) z minulé lekce zkusíme naimportovat.

Import dat

V tabulce máme tedy nějaké data, ale jelikož jsme si udělali export tabulky uzivatele, můžeme jednoduše tuto zálohu naimportovat. Nejdříve si zkusme celou tabulku smazat:

DROP TABLE `uzivatele`;

Nyní v databázi nemáme žádnou tabulku. Import provedeme podobně jako export, pouze klikneme na konkrétní databázi, kde chceme data importovat, a poté na tlačítko Import v horní liště. Měli by jsme se dostat na následující stránku:

Import stránka

Import se může zdát komplikovaný, ve skutečnosti to je ale jednodušší než export. Nejprve vybereme soubor, který chceme importovat. Pro nás to bude ten první vytvořený soubor, který jsme si zkoušeli vyexportovat v minulé lekci. Pokud ho nemáte, můžete si ho stáhnout na konci článku a nebo si ho zkusit vyexportovat. V souboru je příkaz pro vytvoření tabulky i dat. Poté zkontrolujeme znakovou sadu souboru, zda je utf-8.

Dále zde máme funkci "Částečný import". Tuto funkci můžeme nechat zapnutou, jelikož importujeme malý soubor a nic by se pokazit nemělo. Osobně tuto funkci nemám rád a raději ji vypínám. Nechci totiž v databázi polovinu dat a druhou polovinu dat neimportovanou.

Dále tu máme Kontrolu cizích klíčů. Při importu dat, kde máme vytvořené relace (vztahy mezi tabulkami), využijeme tuto funkci poměrně často. O cizích klíčích si povíme více jindy. Dále vybereme správný formát. Musí se shodovat s tím formátem, který jsme vybrali na začátku.

Formátů pro export je více než pro import. Vyberte pro import raději 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:

Úspěšný import
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

Zkusme si všechny uživatele smazat:

DELETE FROM `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 právě maximální čas vykonávaného skriptu 360 nebo 120 sekund, proto bude import neúspěšný a tuto proměnnou musíme změnit. Tato proměnná se nazývá max_execution_time. Soubory exportů velkých databází bývají rozděleny na strukturu, a poté několik souborů na data. Ukážeme si, jak omezení trvání skriptu zvýšit, abychom mohli takto velké soubory databází importovat.

Dalším problémem je chyba max_allowed_packet, díky kterému může váš import failnout:

max_packet_size

Nastavení

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:

Nastavení php.ini v XAMPP

Klikneme na PHP (php.ini). Otevře se nám soubor, kde změníme tedy tyto proměnné:

  • max_execution_time = 0
  • max_input_time = -1
  • memory_limit = 1G

Můžeme využít funkci CTRL+F pro rychlé hledání fráze.

Hodnota 0 u max_execution_time změní trvání skriptu na neomezenou dobu, taktéž je to u max_input_time, ale s hodnotou -1. Memory limit si nastavíme alespoň na hodnotu 1G (1GB).

Nyní si otevřeme soubor my.ini. Postup je stejný, jen je to u modulu MySQL. Zde nastavíme proměnnou max_allowed_packet na 1G.

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í.

Import stále nejde

Pokud import trvá velmi dlouho a nedaří se ho díky tomu korektně importovat, doporučuji si soubor otevřít v poznámkovém bloku. U příkazů pro vkládání (INSERT INTO...) zkontrolujte počet záznamů (neboli počet řádků) na jeden takový příkaz INSERT. Pokud totiž importujeme dlouhý příkaz, který například přidá 10 000 záznamů, často tato operace selže. Je dobré takový příkaz rozdělit na dílčí příkazy.

Pokud máme tedy příkaz INSERT, který přidá 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, žltá', '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, žltá', '19999.0'),
(1649, '800854_G', 'Stolní počítač Cnd KS-374ZB, žltá', '20999.0'),
/* ... */

Tento způsob zrychlí proces importování dat. Při exportu phpMyAdmin tuto metodu automaticky využívá, pokud však máte databázi z třetí ruky nebo ji třeba generujete nějakým skriptem, je vhodné se na tento soubor kouknout a upravit ho :)

Kontrola dat

Pokud budeme nahrávat větší databázi (například v MySQL cvičení), mělo by vše být v pořádku. Pokud jste sem přišli z cvičení, můžete pro kontrolu importovaných dat využít tyto dva screeny, nejprve pro databázi insane_racing (závodníci):

a poté databázi simple_money (eshop):

Zkontrolujte si počet tabulek a celkový počet řádků (záznamů). Pokud se vše shoduje, data jsou pravděpodobně správná :)

V následujícím cvičení, Řešené úlohy k 1.-5. lekci MySQL/MariaDB, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Stáhnout

Staženo 5x (1.47 kB)

 

Předchozí článek
MySQL krok za krokem: Export
Všechny články v sekci
MySQL/MariaDB databáze krok za krokem
Článek pro vás napsal Samuel Hél
Avatar
Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!
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 a svou gf
Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!