Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
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í.
Mezi 13:00 až cca 15:00 proběhne pravidelná odstávka sítě z důvodu aktualizace. Web bude po celou dobu nedostupný.
discount 30 + hiring

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.

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 bychom 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 export 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

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. Tato proměnná musí být pod hlavičkou [mysqldump], je to většinou ten druhý nález v souboru.

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é pro databázi simple_money (e-shop):

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


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 294x (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
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í:
96 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

 

 

Komentáře
Zobrazit starší komentáře (8)

Avatar
Patrik Fiala
Člen
Avatar
Patrik Fiala:17. ledna 13:02

bohužel nic takového tam není viz obrázek.. stackoverflow sem procházel a žádný kloudný řešení sem nenašel. tak nevím

 
Odpovědět
17. ledna 13:02
Avatar
Samuel Hél
Tým ITnetwork
Avatar
Odpovídá na Patrik Fiala
Samuel Hél:17. ledna 13:55

Na MacOS musíš přistoupit k souboru php.ini manuálně (najít ho v souborovém systému). Na netu píšou, že je to často v /opt/lampp/etc/php.ini (záleží, kam jsi ho instaloval)

 
Odpovědět
17. ledna 13:55
Avatar
Patrik Fiala
Člen
Avatar
Odpovídá na Samuel Hél
Patrik Fiala:17. ledna 14:12

yes mám to, tak to můžu manuálně přepsat. díky moc!

 
Odpovědět
17. ledna 14:12
Avatar
Tereza Řezníčková:14. února 10:36

Ahoj, v souboru my.ini je max_allowed_packet na dvou místech. Mají se změnit hodnoty u obojího? Děkuji za odpověď.

 
Odpovědět
14. února 10:36
Avatar
Samuel Hél
Tým ITnetwork
Avatar
Odpovídá na Tereza Řezníčková
Samuel Hél:14. února 10:58

Ahoj, na tom druhém místě, přesněji pod hlavičkou [mysqldump]. Doplním do lekce :)

 
Odpovědět
14. února 10:58
Avatar
Josef N.
Tvůrce
Avatar
Josef N.:24. února 10:21

Opomenuta možnost použití MariaDB-CLI (konzolového klienta) pro import s možností záznamu průběhu do souboru (\T):

mariadb -u uzivatel -p <ENTER>
heslo: ********* <ENTER>

MariaDB [(none)]>\C utf8 <ENTER>
MariaDB [(none)]>use nejakadatabase; <ENTER>

MariaDB [nejakadatabase]>\T /home/uzivatel/sql_im­port.txt
MariaDB [nejakadataba­se]>source /home/uzivatel/za­loha.sql <ENTER>

Odpovědět
24. února 10:21
Ne estas pano sen laboro!
Avatar
Jaroslav Drobek:11. dubna 4:02

Hodnocení

  • Místo "Vyberte pro import.." má být "Vyberte pro export".
  • "failnout" - bavím se!
  • Pod Ubuntu 20.04 není úplně triviální spustit ovládací panel XAMPP. Navíc má zcela jinou logiku, než podle které jsme navigováni v lekci - to je spousta práce a hlavně času navíc.
  • Také názvy/přípony některých souborů jsou jiné, např. místo my.ini vidím my.cnf - zrádná úskalí všech kuchařek se zaručenými (ale zastaralými) recepty..
 
Odpovědět
11. dubna 4:02
Avatar
Jaroslav Drobek:11. dubna 7:49

Hodnocení (poračování):

  • V úvodním odstavci je špatně označený odkaz na minulou lekci.
 
Odpovědět
11. dubna 7:49
Avatar
Nadšenec Ajťákový:24. dubna 14:10

Bohužel se mi nepodařilo najít příkazy memory_limit, max_allowed_pac­ket ani mysqldump :/. Tak snad to nebude v budoucnu dělat problémy. Alespoň ty první příkazy jsem našel.

 
Odpovědět
24. dubna 14:10
Avatar
Odpovídá na Nadšenec Ajťákový
Nadšenec Ajťákový:10. května 10:59

Jenom abych to uvedl na pravou míru, i vzhledem k tomu, že jsem dostal palec na předešlý komentář, jakožto pravděpodobné potvrzení toho, že se to někomu také nepovedlo.
Klasicky jsem napsal komentář, že mi něco nejde, abych po chvíli zjistil, že jsem si jen špatně přečetl článek, kde to je snad dostatečně jasně napsáno...
Vše co jsem potřeboval jsem našel :)

Editováno 10. května 11:00
 
Odpovědět
10. května 10:59
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.

Zobrazeno 10 zpráv z 18. Zobrazit vše