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:
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
:
Ď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:
Teraz máme v databáze dáta, ktoré sme zálohovali:
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:
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
.
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:
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