Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

5. diel - MySQL krok za krokom - Import

V minulej lekcii, MySQL krok za krokom - Export, sme si ukázali rôzne typy exportov databázy.

V dnešnom MySQL tutoriále si ukážeme, ako do databázy importovať dáta z predtým vytvorenej zálohy.

Import dát

V našej databáze máme z minulosti tabuľku users s niekoľkými záznamami. Najskôr si ju teda celú zmažeme príkazom:

DROP TABLE `users`;

V databáze teraz nemáme žiadnu tabuľku. Poďme si ju späť importovať vrátane štruktúry aj dát. V ľavom paneli klikneme na našu databázu database_for_web, do ktorej budeme chcieť dáta importovať. Potom otvoríme záložku Import v hornej lište:

Otvorenie záložky pre import v phpMyAdmin - MySQL databázy krok za krokom

Klikneme na možnosť Choose File a vyberieme súbor, ktorý chceme importovať. Pre nás to bude ten prvý vytvorený súbor, ktorý sme skúšali exportovať v lekcii MySQL krok za krokom - Export. Ten je tiež k dispozícii v archíve existujúcej lekcie alebo si ho najskôr môžete vytvoriť. V súbore je príkaz na vytvorenie tabuľky aj dát.

Pri tvorbe zálohy sme v nastavení upresnili, že chceme pôvodnú tabuľku, ak existuje, prepísať. Na začiatku súboru teda máme aj príkaz DROP TABLE, ktorý sme spustili v úvode.

Potom skontrolujeme znakovú sadu súboru, či je utf-8:

Otvorenie záložky pre import v phpMyAdmin - MySQL databázy krok za krokom

Ďalšie položky v ponuke importu

Nižšie máme aktivovanú položku Allow the interruption of an import in case the script detects it is close to the PHP timeout limit. Tú v našom prípade môžeme nechať zapnutú, pretože importujeme malý súbor. Pri väčších databázach by sa však mohlo stať, že sa nám do databázy importuje iba polovica dát a druhá polovica nebude importovaná.

Ďalej v sekcii Other options máme aktivovanú kontrolu cudzích kľúčov. Pri importe dát, kde máme vytvorené relácie, teda vzťahy medzi tabuľkami, využijeme túto funkciu pomerne často. O cudzích kľúčoch si však povieme viac inokedy.

Nasleduje výber formátu uložených dát, kde nechávame východiskový formát SQL ako pri exporte.

Formátov pre export je viac ako pre import. Pri tvorbe exportu teda radšej volíme formát, ktorý sa dá potom aj importovať, najlepšie SQL.

Ak máme všetko nastavené, klikneme na tlačítko Import. Zobrazia sa nám správy o úspešnom importe:

Výpis informácie o úspešnom importe - MySQL databázy krok za krokom

Teraz máme v databáze dáta, ktoré sme zálohovali:

Kontrola importovaných dát - MySQL databázy krok za krokom

Skúsme si všetkých používateľov zmazať:

TRUNCATE TABLE `users`;

Tabuľka je opäť prázdna :)

Veľké databázy

Niekedy sa môže stať, že import bude neúspešný. Veľký súbor môže phpMyAdmin importovať napríklad dlhšie ako 6 minút. V predvolenom nastavení PHP servera je maximálny čas vykonávaného skriptu obmedzený na 360 alebo 120 sekúnd. Pri väčších databázach bude preto import neúspešný a my túto premennú musíme zmeniť, aby sme databázu mohli importovať. Táto premenná sa nazýva max_execution_time.

Súbory exportov veľkých databáz bývajú z tohto dôvodu rozdelené na štruktúru, a potom na niekoľko súborov s dátami. My si však ukážeme, ako obmedzenie trvania skriptu zvýšiť, aby sme mohli aj väčšie súbory databáz importovať.

Úprava nastavenia PHP servera

Keďže v cvičeniach budeme importovať ďalšie databázy, je vhodné si pred importom databáz premenné správne nastaviť. To môžeme urobiť v konfiguračnom súbore php.ini. Dostaneme sa do neho jednoducho cez XAMPP kliknutím na tlačidlo Config na riadku modulu Apache:

Otvorenie súboru php.ini v XAMMPe - MySQL databázy krok za krokom

Klikneme na PHP (php.ini) a otvorí sa nám súbor, v ktorom nasledujúcim premenným nastavíme tieto hodnoty:

  • max_execution_time = 0
  • memory_limit = 1G

Na rýchle vyhľadanie frázy použijeme klávesovú skratku CTRL + F a do otvoreného okna zadáme hľadaný výraz.

Hodnota 0 pre premennú max_execution_time zmení trvanie skriptu na neobmedzenú dobu. Premennú memory_limit si nastavíme aspoň na hodnotu 1G (1GB).

Úprava nastavenia MySQL servera

Ďalším problémom je chyba max_allowed_packet, kvôli ktorej sa náš import nemusí vykonať. Preto si ešte upravíme súbor my.ini. Ten otvoríme kliknutím na tlačidlo Config pri module MySQL:

Otvorenie súboru my.ini v XAMMPe - MySQL databázy krok za krokom

Tu nastavíme premennú max_allowed_packet na 1G. Táto premenná musí byť pod hlavičkou [mysqldump], je to väčšinou ten druhý nález v súbore. Upravený súbor uložíme.

Po týchto zmenách musíme reštartovať službu Apache a MySQL. Klikneme na Stop v rozhraní XAMPP a potom na Start pre zapnutie.

Rozdelenie importu do viacerých príkazov

Ak sa aj napriek upravenému nastaveniu serverov import stále nedarí vykonať, môžeme si súbor so zálohou otvoriť v poznámkovom bloku. Pri príkazoch na vkladanie dát skontrolujeme počet záznamov (čiže počet riadkov) na jeden taký príkaz INSERT. Ak totiž importujeme dlhý príkaz, ktorý má napríklad pridať naraz 10 000 záznamov, často táto operácia zlyhá. Je dobré takýto príkaz rozdeliť na niekoľko čiastkových príkazov.

Ak teda máme príkaz INSERT, ktorý pridáva naraz 10 000 záznamov, rozdelíme ho na 10 príkazov po 1000 záznamoch:

INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES
(1, '3269_J', 'Bag Karya ultra 566 yellow', '849.0'),
(2, '1403_I', 'Bag Karya medium 960 black', '899.0'),
(3, '1059_N', 'Bag Karya medium 283 black', '899.0'),
(4, '3623_T', 'Bag Karya small 245 blue', '899.0'),
(5, '2867_W', 'Bag A-ELITA', '999.0'),
/* there would be another 838 records */
(843, '1741740', 'Fryer Moulinex LV-839WF, pink', '2849.0'),
(844, '1695207', 'Fryer Moulinex LH-319KJ, silver', '3149.0'),
(845, '2787965', 'Fryer Moulinex MQ-768LA, black', '2699.0'),
(846, '2618863', 'Fryer Moulinex LQ-998AZ, yellow', '2699.0');

/* next command INSERT */
INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES
(847, '1500603', 'Fryer KITFORT', '2699.0'),
(848, '2792623', 'Medium Fryer Gorenje talent gradient silver', '3149.0'),
(849, '2248192', 'Fryer UNIT sky', '2549.0'),
(850, '2379065', 'Fryer UNIT sun', '3149.0'),
/* next 794 records */
(1645, '802964_O', 'Big Computer JBL l6 sensitive bright yellow', '17999.0'),
(1646, '801345_X', 'Computer Cnd DX-514DC, brown', '17999.0'),
(1647, '803198_A', 'Computer Cnd RD-509UV, red', '17999.0');

/* next command INSERT */
INSERT INTO `item` (`product_id`, `code`, `title`, `price`) VALUES
(1648, '800672_T', 'Computer Cnd BK-539CL, yellow', '19999.0'),
(1649, '800854_G', 'Computer Cnd KS-374ZB, yellow', '20999.0'),
/* ... */

Tento spôsob zrýchli proces importovania dát.

Pri exporte phpMyAdmin túto metódu automaticky využíva, ak však máme databázu od niekoho iného alebo ju napríklad generujeme nejakým skriptom, je vhodné sa na tento súbor pozrieť a prípadne ho upraviť.

V nasledujúcom kvíze, Kvíz - Tvorba, mazanie, vkladanie, import/export dát v MySQL, si vyskúšame nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 12x (1.3 kB)
Aplikácia je vrátane zdrojových kódov v jazyku mysql

 

Predchádzajúci článok
MySQL krok za krokom - Export
Všetky články v sekcii
MySQL databázy krok za krokom
Preskočiť článok
(neodporúčame)
Kvíz - Tvorba, mazanie, vkladanie, import/export dát v MySQL
Článok pre vás napísal Samuel Hél
Avatar
Užívateľské hodnotenie:
21 hlasov
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