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

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 uzivatele s niekoľkými záznamami. Najskôr si ju teda celú zmažeme príkazom:

DROP TABLE `uzivatele`;

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šej databáze, databaze_pro_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 - MySQL databázy krok za krokom

Klikneme na možnosť Vybrať súbor 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 pre vytvorenie tabuľky aj dát.

Pri tvorbe zálohy sme v nastavení upresnili, že chceme pôvodnú tabuľku, pokiaľ 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:

Výber súboru pre import - MySQL databázy krok za krokom - MySQL databázy krok za krokom

Ďalšie položky v ponuke importu

Nižšie máme aktivovanú položku Povoliť prerušenie importu v prípade, že skript spozná, že sa blíži časový limit nastavený v PHP. 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 Ďalšie možnosti 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.

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

Výpis informácie o úspešnom importe  - MySQL databázy krok za krokom - 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 - MySQL databázy krok za krokom

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

TRUNCATE TABLE `uzivatele`;

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 premennej 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 - MySQL databázy krok za krokom

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

  • max_execution_time = 0,
  • memory_limit = 1G.
Na rýchle hľadanie vyhľadania 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, vďaka ktorému 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 - 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 Štart 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. Pokiaľ 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', '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 spôsob zrýchli proces importovania dát.

Pri exporte phpMyAdmin túto metódu automaticky využíva, pokiaľ 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 a 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é 736x (1.37 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 a export dát v MySQL
Článok pre vás napísal Samuel Hél
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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