5. diel - MySQL krok za krokom: Import
V minulej lekcii, MySQL krok za krokom: Dátové typy a NULL , sme si ukázali rôzne typy exportov databázy.
Dnes si vytvorenú zálohu tabuľky (export) z minulej lekcie skúsime naimportovať.
Import dát
V tabuľke máme teda nejaké dáta, ale keďže sme si urobili export
tabuľky uzivatele
, môžeme jednoducho túto zálohu
naimportovať. Najskôr si skúsme celú tabuľku zmazať:
DROP TABLE `uzivatele`;
Teraz v databáze nemáme žiadnu tabuľku. Import vykonáme podobne ako export, len klikneme na konkrétnu databázu, kde chceme dáta importovať, a potom na tlačidlo Import v hornej lište. Mali by sme sa dostať na nasledujúcu stránku:
Import sa môže zdať komplikovaný, v skutočnosti to je ale jednoduchšie
než export. Najprv vyberieme súbor, ktorý chceme importovať. Pre nás to
bude ten prvý vytvorený súbor, ktorý sme si skúšali vyexportovať v
minulej lekcii. Pokiaľ ho nemáte, môžete si ho stiahnuť na konci článku a
alebo si ho skúsiť vyexportovať. V súbore je príkaz pre vytvorenie tabuľky
i dát. Potom skontrolujeme znakovú sadu súboru, či je
utf-8
.
Ďalej tu máme funkciu "Čiastočný import". Túto funkciu môžeme nechať zapnutú, pretože importujeme malý súbor a nič by sa pokaziť nemalo. Osobne túto funkciu nemám rád a radšej ju vypínam. Nechcem totiž v databáze polovicu dát a druhú polovicu dát neimportovanou.
Ďalej tu máme Kontrolu cudzích kľúčov. Pri importe dát, kde máme vytvorené relácie (vzťahy medzi tabuľkami), využijeme túto funkciu pomerne často. O cudzích kľúčoch si povieme viac inokedy. Ďalej vyberieme správny formát. Musí sa zhodovať s tým formátom, ktorý sme vybrali na začiatku.
Formátov pre export je viac než pre import. Vyberte pre import radšej formát, ktorý sa dá potom aj importovať, najlepšie SQL.
Ak máme všetko nastavené, klikneme na tlačidlo Vykonaj. Zobrazí 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šetky užívateľa zmazať:
DELETE FROM `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 práve maximálny čas vykonávaného skriptu 360 alebo 120
sekúnd, preto bude import neúspešný a túto premennú musíme zmeniť. Táto
premenná sa nazýva max_execution_time
. Súbory exportov veľkých
databáz bývajú rozdelené na štruktúru, a potom niekoľko súborov na
dáta. Ukážeme si, ako obmedzenie trvania skriptu zvýšiť, aby sme mohli
takto veľké súbory databáz importovať.
Ďalším problémom je chyba max_allowed_packet
, vďaka
ktorému môže váš import failnout:
Nastavenie
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:
Klikneme na PHP (php.ini
). Otvorí sa nám súbor, kde zmeníme
teda tieto premenné:
max_execution_time = 0
max_input_time = -1
memory_limit = 1G
Môžeme využiť funkciu CTRL + F pre rýchle hľadanie frázy.
Hodnota 0
u max_execution_time
zmení trvania
skriptu na neobmedzenú dobu, taktiež je to u max_input_time
, ale
s hodnotou -1
. Memory limit si nastavíme aspoň na hodnotu
1G
(1GB).
Teraz si otvoríme súbor my.ini
. Postup je rovnaký, len je to
pri module MySQL. Tu nastavíme premennú max_allowed_packet
na
1G
.
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.
Import stále nejde
Ak import trvá veľmi dlho a nedarí sa ho vďaka tomu korektne importovať,
odporúčam si súbor otvoriť v poznámkovom bloku. U príkazov pre vkladanie
(INSERT INTO...
) skontrolujte počet záznamov (čiže počet
riadkov) na jeden taký príkaz INSERT
. Ak totiž importujeme dlhý
príkaz, ktorý napríklad pridá 10 000 záznamov, často táto operácia
zlyhá. Je dobré taký príkaz rozdeliť na čiastkové príkazy.
Ak máme teda príkaz INSERT
, ktorý pridá 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, ž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 spôsob zrýchli proces importovanie dát. Pri exporte phpMyAdmin túto metódu automaticky využíva, ak však máte databázu z tretej ruky alebo ju treba generujete nejakým skriptom, je vhodné sa na tento súbor pozrieť a upraviť ho:)
Kontrola dát
Ak budeme nahrávať väčšie databázu (napríklad v MySQL cvičenie), malo
by všetko byť v poriadku. Ak ste sem prišli z cvičenia, môžete pre
kontrolu importovaných dát využiť tieto dva screeny, najprv pre databázu
insane_racing
(pretekári):
a potom databázu simple_money
(eshop):
Skontrolujte si počet tabuliek a celkový počet riadkov (záznamov). Ak sa všetko zhoduje, dáta sú pravdepodobne správna:)
Nabudúce si v lekcii MySQL krok za krokom: Dátové typy a NULL povieme niečo o hodnote NULL a predstavíme si tabuľku dátových typov v MySQL.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 709x (1.47 kB)