Uczę się MySQL i próbowałem użyć LOAD DATA
klauzuli. Kiedy użyłem go jak poniżej:
LOAD DATA INFILE "text.txt" INTO table mytable;
Wystąpił następujący błąd:
Serwer MySQL działa z opcją --secure-file-priv, więc nie może wykonać tej instrukcji
Jak rozwiązać ten błąd?
Sprawdziłem inne pytanie dotyczące tego samego komunikatu o błędzie , ale nadal nie mogę znaleźć rozwiązania.
Korzystam z MySQL 5.6
mysqldump --tab
, jakby nie było wystarczająco trudno wyciągnąć własne dane z mysql.LOAD DATA LOCAL INFILE ...
Odpowiedzi:
Działa zgodnie z przeznaczeniem. Twój serwer MySQL został uruchomiony z opcją --secure-file-priv , która zasadniczo ogranicza, z których katalogów można ładować pliki
LOAD DATA INFILE
.Możesz użyć,
SHOW VARIABLES LIKE "secure_file_priv";
aby zobaczyć katalog, który został skonfigurowany.Masz dwie opcje:
secure-file-priv
.secure-file-priv
. Trzeba to usunąć ze startu i nie można go dynamicznie modyfikować. W tym celu sprawdź parametry startowe MySQL (w zależności od platformy) i my.ini.źródło
--secure-file-priv
same listę .SHOW VARIABLES LIKE "secure_file_priv";
Miałem ten sam problem. W końcu rozwiązałem za pomocą
LOCAL
opcji w poleceniuLOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Więcej informacji można znaleźć tutaj http://dev.mysql.com/doc/refman/5.7/en/load-data.html
źródło
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads
2. wyłączeniesecure_file_priv
wmy.ini
i ponowne uruchomienie bazy MySQL 3. To jeden! Dzięki :)--local-infile
flagę podczas uruchamianiamysql
. stackoverflow.com/questions/10762239/…The used command is not allowed with this MySQL version
z MySQL 8.0W Ubuntu 14 i Mysql 5.5.53 to ustawienie wydaje się być domyślnie włączone. Aby go wyłączyć, musisz dodać
secure-file-priv = ""
do pliku my.cnf w grupie konfiguracyjnej mysqld. na przykład:-źródło
# secure-file-priv = ~
to nadal występuje błąd, ponieważ wartość pokazuje, żeNULL
wykonanie tego w ten sposób rozwiązuje problem, gdy chcesz wybrać, do których katalogów możesz wyeksportować na serwer itp.Pracuję nad MySQL5.7.11 na Debianie, polecenie, które działało dla mnie, aby zobaczyć katalog to:
źródło
SHOW VARIABLES LIKE "secure_file_priv";
dostaję,ERROR 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist
który jest również rzucany w innych okolicznościach i będę musiał w końcu sobie poradzić.SELECT @@global.secure_file_priv;
Komenda choć produkowane oczekiwanego rezultatu.Oto, co działało dla mnie w Windows 7, aby wyłączyć
secure-file-priv
(Opcja nr 2 z odpowiedzi vhu ):services.msc
.C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
w moim przypadku był to ukryty folder).my.ini
plik w Notatniku.secure-file-priv=""
services.msc
.źródło
Jeśli plik jest lokalny dla twojego komputera, użyj LOCAL w swoim poleceniu
źródło
@vhu
Zrobiłem
SHOW VARIABLES LIKE "secure_file_priv";
i to wróciło,C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
więc kiedy to podłączyłem, nadal nie działało.Kiedy poszedłem bezpośrednio do pliku my.ini, odkryłem, że ścieżka jest sformatowana nieco inaczej:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
Potem, kiedy to uruchomiłem, zadziałało. Jedyną różnicą jest kierunek cięć.
źródło
Miałem ten sam problem z programem „secure-file-priv”. Komentowanie w pliku .ini nie działało, podobnie jak przenoszenie pliku do katalogu określonego przez „secure-file-priv”.
Wreszcie, zgodnie z sugestią dbc, działało „bezpieczne-plik-prywatny” równy pustemu ciągowi znaków. Więc jeśli ktoś utknie po wypróbowaniu powyższych odpowiedzi, mam nadzieję, że zrobienie tego pomoże.
źródło
Rzecz, która zadziałała dla mnie:
secure-file-priv
.Aby znaleźć ten typ:
local_infile = 1
.Zrób to wpisując:
Jeśli dostaniesz:
Następnie ustaw jedną literę:
źródło
Ten wątek był oglądany 522k razy w czasie tego postu. Szczerze mówiąc, kiedy MySQL stała się naszą nadmiernie opiekuńczą nieracjonalną mamą ? Cóż za czasochłonna próba bezpieczeństwa - która tak naprawdę służy jedynie do kajdan!
Po wielu poszukiwaniach i wielu próbach wszystko się nie udało.
Moje rozwiązanie:
źródło
Miałem z tym różnego rodzaju problemy. Zmieniłem mój.cnf i wszelkiego rodzaju szalone rzeczy, które inne wersje tego problemu próbowały pokazać.
Co dla mnie zadziałało:
Wystąpił błąd
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Byłem w stanie to naprawić, otwierając /usr/local/mysql/support-files/mysql.server i zmieniając następujący wiersz:
do
źródło
Jeśli korzystasz z Ubuntu, być może będziesz musiał skonfigurować Apparmor, aby umożliwić MySQL zapisywanie w twoim folderze, np. Oto moja konfiguracja:
Dodaj tę linię do pliku /etc/apparmor.d/usr.sbin.mysqld:
Następnie dodaj te 2 wiersze konfiguracji do sekcji /etc/mysql/my.cnf:
Oto mój SQL:
To zadziałało dla mnie. Powodzenia!
źródło
W przypadku wersji mysql 8.0 możesz to zrobić:
To działało dla mnie na Mac High Sierra
źródło
Utworzyłem skrypt importu NodeJS, jeśli korzystasz z nodeJS, a dane są w następującej formie (podwójny cudzysłów + przecinek i \ n nowa linia)
Ten jest skonfigurowany do działania na http: // localhost: 5000 / import .
Idę linia po linii i tworzy ciąg zapytania
server.js
ImportRoutes.js
db.js to plik konfiguracyjny
Oświadczenie: To nie jest idealne rozwiązanie - publikuję je tylko dla programistów, którzy są na osi czasu i mają wiele danych do zaimportowania i napotykają ten absurdalny problem. Straciłem na tym dużo czasu i mam nadzieję zaoszczędzić innemu twórcy tyle samo straconego czasu.
źródło
Miałem ten problem w systemie Windows 10. „--secure-file-priv w MySQL” Aby rozwiązać ten problem, wykonałem następujące czynności.
Serwer uruchomił się zgodnie z oczekiwaniami.
źródło
MySQL używa tej zmiennej systemowej, aby kontrolować, gdzie można importować pliki
Problem polega na tym, jak zmienić zmienne systemowe, takie jak
secure_file_priv
.mysqld
sudo mysqld_safe --secure_file_priv=""
teraz możesz zobaczyć tak:
źródło
W macOS Catalina wykonałem te kroki, aby ustawić
secure_file_priv
1. Zatrzymaj usługę MySQL
2. Zrestartuj MYSQL przypisując zmienne systemowe --secure_file_priv
Uwaga: Dodanie pustej wartości rozwiązuje problem dla mnie, a MYSQL wyeksportuje dane do katalogu / usr / local / mysql / data / YOUR_DB_TABLE / EXPORT_FILE
Dzięki
źródło
Bez zmiany plików konfiguracyjnych ..
secure_file_priv
za pomocą polecenia wysłane przez @vhu:SHOW VARIABLES LIKE "secure_file_priv"
.select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE' ... rest of your query
działało to dla mnie w mysql-shell na Ubuntu 18.04 LTS mysql 5.7.29
źródło