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
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łaniamysql_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 zrozumlocal-infile
, określ go za pomocą prefiksuloose-
:[client] loose-local-infile=1Jeś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
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
.
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.
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:
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