Autor Zpráva
MikeO
Profil
Mám problém s importem velmi jednoduchého textového souboru stávajícího ze tří sloupců do tabulky v mysql. Data jsem převedl i do formátu csv, ale taktéž mi nejdou importovat. Formát dat v csv souboru je následující: "hodnota1","hodnota2",hodnota3"
Pakliže se rozhodnu jako uživatel v phpmyadmin o import, výsledek skončí s touhle hláškou: Nepodařilo se načíst žádná data k importu. Buďto nebyl odeslán žádný soubor, nebo jeho velikost překročila velikost povolenou v nastavení PHP. Viz FAQ 1.16.
Pomocí příkazu mysqlimport: mysqlimport -u root -p -h localhost --fields-enclosed-by=" --fields-terminated-by=, databaze tabulka.csv se taktéž nic neděje a skončím takhle >_
a data naimportována nebyla.
Tabulka tabulka je v databazi vytvořena a je s prvním sloupcem id jako AUTO_INCREMENT a třemi dalšími: hodnota1, hodnota2, hodnota3, vše typy VARCHAR. Import jsem zkoušel i bez sloupce id v mysql tabulce.
V nastavení mám: file_uploads On, upload_max_filesize 2M. Můj soubor je větší, ale rozdělil jsem jej na menší, konfiguraci jsem neměnil. A už mi dochází inspirace, kde je problém.
TomášK.
Profil *
Máš ošetřené uvozovky? Nečeká to jen na ukončení příkazu?
mysqlimport -u root -p -h localhost --fields-enclosed-by='"' --fields-terminated-by=, 
MikeO
Profil
TomášK.:
Díky, ale tím to asi nebude.
Po nějaké aktualizaci mysql, která proběhla letošní rok, zcela nepozměněný příkaz mysqlimport viz výše, prošel, ovšem s chybovou hláškou

mysqlimport: Error: 13, Can't get stat of 'tabulka.csv' (Errcode: 13 "Permission denied"), when using table: tabulka

Práva v mysql pro databázi jsem přidělil:
GRANT ALL PRIVILEGES ON databaze TO pro daného uživatele

Linuxová práva pro datový adresář mysql jsou pro uživatele mysql:mysql drwxr-xr-x

Připojený jsem přes localhost UNIX socket
Kajman
Profil
Může být špatná cesta (zkuste absolutní) nebo může být omezení politikou selinuxu.
Keeehi
Profil
MikeO:
Taky mysql nemusí mít přístup do té složky. Nejde jen o práva toho souboru ale taky o adresáře ve kterých se nachází. Ověřit by to mělo jít pomocí:
sudo -u mysql ls /cesta/k/souboru/tabulka.csv
MikeO
Profil
Děkuji. Ano byla to ta práva pro složku, kde se nacházel soubor csv, mysqlimport tam nemohl.
Data pak dle parametrů šla ze souboru naimportovat, ale musel jsem smazat v databázi id pole s vlastností auto_increment, s id to končilo chybou:

mysqlimport: Error: 1062, Duplicate entry '2018' for key 'PRIMARY', when using table: tabulka

Asi bych řekl, že až po naimportování všech dat, teprve řešit id záznamů.
Keeehi
Profil
MikeO:
No ta chyba to říká celkem jasně, snažil jsi se do toho sloupce uložit záznam s id 2018, jenže záznam s takovým id tam už byl. Druhá možnost je, že duplikované id bylo v tom csv souboru.
MikeO
Profil
Ano vím, tak jsem sloupec id s auto_increment dal jako poslední a při vkládání je to již bez problému. Hodnota 2018 se tam opakovat několikrát samozřejmě bude, ale již ne v id, ale v jiném sloupci.
MikeO
Profil
Ztrácím už tipy jak odmazat prázdné řádky v rozsáhlejším textovém souboru. Soubory mají cca 80000 řádků a tyhle možnosti mi na tak velké soubory už nefungují, pouze na menší.

sed '/^$/d'
cat /souborkimportu | tr -s '\n'

V příkazu sed jsem nenašel žádný parametr, ktery by ovlivňoval velikost souboru se kterým může pracovat.
Keeehi
Profil
MikeO:
On taky na to žádný parametr není. On tam žádný limit na to teoreticky není. Limitem je paměť, kterou ten příkaz (program) ke svému běhu potřebuje.
Pokud to spouštíš na serveru, tak to zkus udělat u sebe na počítači, protože u sebe budeš mít asi více paměti. Pokud ti nestačí paměť nikde, budeš se muset podívat po nástroji který nenačítá celý vstupní soubor do paměti najednou ale čte ho sekvenčně, po částech.
MikeO
Profil
Ty soubory jsou v řádcích sice rozsáhlejší, ale o velikosti max 2-3MB více ne, na serveru jsem to ani nespouštěl, spouštím na pc, 16GB ram, což mi přijde dostačující pro tenhle účel. Zkusím je ješt ě rozdělit na menší části. A nebo přikoupit paměť :-)
Keeehi
Profil
MikeO:
Při takovýchto hodnotách by to pro počítač neměl být žádný problém.

Jak se projevuje to, že ti nefunguje to mazání řádků? Příkaz běží a nikdy neskončí/soubor je nezměněn/soubor je prázdný/něco jiného?

Co mě teď napadá je, že některé příkazy nemají rády když upravují soubor který čtou, je u nich potřeba zdrojová data načítat z jednoho souboru a transformovaný výstup ukládat do jiného souboru. Tak jestli problém nemůže být v tom.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0