Jak mogę poprawić błąd ładowania MySQL

Nie jestem pewien, czy podobne pytanie zostało zamknięte przez próbuję uruchomić następujący program MySQL.

mysql -e "load data local infile \
'/tmp/ept_inventory_wasp_export_04292013.csv' into \
table wasp_ept_inv fields terminated by ',' \
lines terminated by '\n' ;"

W wierszu poleceń bash i uzyskaj ten błąd

ERROR 1148 (42000) at line 1: The used command is not allowed with this MySQL version

Jak mogę obejść ten problem?

W rzeczywistości uruchamiam to polecenie z programu Pythona, ale wyciągnąłem je, aby spróbować manipulować nim w wierszu poleceń bash.

Widziałem, jak mogę modyfikować swoje.cnf (local-infile), ale nie chcę tej globalnej zmiany, jeśli można tego uniknąć.

Oto wersja MySQL.

mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (i686) using readline 6.2

Author: shgnInc, 2013-04-29

4 answers

Zgodnie z dokumentacją problemy bezpieczeństwa z LOAD DATA LOCAL:

Aby poradzić sobie z tymi problemami, zmieniliśmy sposób LOAD DATA LOCAL jest obsługiwane od MySQL 3.23.49 i MySQL 4.0.2 (4.0.13 w systemie Windows):

  • Domyślnie wszystkie klienty i biblioteki MySQL w dystrybucjach binarnych są kompilowane z opcją --enable-local-infile, aby były zgodne z MySQL 3.23.48 i wcześniejszymi.

  • Jeśli budujesz MySQL ze źródła, ale nie wywołaj configure z --enable-local-infile opcja, LOAD DATA LOCAL nie może być używany przez żadnego klienta, chyba że jest napisany jawnie w celu wywołania mysql_options(... MYSQL_OPT_LOCAL_INFILE, 0). Patrz Sekcja 20.6.6.49, "mysql_options()".

  • Możesz wyłączyć wszystkie LOAD DATA LOCAL polecenia od strony serwera uruchamiając mysqld z --local-infile=0 opcja.

  • Dla klienta linii poleceń mysql włącz LOAD DATA LOCAL, podając --local-infile[=1] opcja, lub wyłączyć ją za pomocą --local-infile=0 opcja. Dla mysqlimport, local data file loading is off by default; enable it with the --local lub -L opcja. W każdym razie pomyślne użycie lokalnej operacji ładowania wymaga, aby serwer na to zezwolił.

  • Jeśli używasz LOAD DATA LOCAL w skryptach Perla lub innych programach, które odczytują grupę [client] z plików opcji, możesz dodać opcję local-infile=1 do tej grupy. Jednak, aby nie powodować problemów dla programów, które nie zrozum local-infile, określ go za pomocą prefiksu loose-:

    [client]
    loose-local-infile=1
    
  • Jeśli LOAD DATA LOCAL jest wyłączony, zarówno na serwerze, jak i kliencie, klient, który próbuje wydać taką instrukcję, otrzymuje następujący komunikat o błędzie:

    ERROR 1148: The used command is not allowed with this MySQL version

 31
Author: eggyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 18:50:05

Obejściem tego problemu jest zmodyfikowanie linii poleceń mysql -e tak, aby przekazywała się w argumencie --local-infile=1 w następujący sposób:

mysql --local-infile=1 -u username -p `

Następnie uruchom ponownie polecenie LOAD DATA LOCAL INFILE.

 47
Author: octopusgrabbus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 21:56:33

local-infile musi być włączona zarówno na serwerze, jak i u klienta. Możesz to osiągnąć dodając local-infile = 1 do odpowiedniej sekcji w pliku my.cnf (Unix) lub my.ini (Windows) każdego końca. Na przykład na kliencie:

[client]
local-infile = 1

Można to również włączyć w trybie runtime na serwerze, ustawiając zmienną systemową local_infile:

SET GLOBAL local_infile=1;

Jednak nadal musisz włączyć go na kliencie. Możesz to zrobić w czasie wykonywania, dodając parametr wiersza poleceń do mysql polecenie:

mysql --local-infile=1 ...

Jeśli używasz Amazon Web Services RDS, możesz skonfigurować ustawienie serwera, edytując lub tworząc grupę parametrów. Poszukaj parametru local_infile. Może być konieczne ponowne uruchomienie serwera po zastosowaniu zmian.

 8
Author: Zenexer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 04:19:38

Zgaduję, że twój serwer MySQL nie ma włączonej LOAD DATA LOCAL. Zobacz tę sekcję dokumentacji MySQL:

Jeśli LOAD DATA LOCAL jest wyłączone, zarówno na serwerze, jak i w kliencie, klient, który próbuje wydać taką instrukcję, otrzymuje następujący komunikat o błędzie:

Błąd 1148: używane polecenie nie jest dozwolone w tej wersji MySQL

Oto link do strony, którą dostałem to from:

Http://dev.mysql.com/doc/refman/5.5/en/load-data-local.html

 0
Author: Mike Brant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 18:50:26