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