MySQL에서 --secure-file-priv를 어떻게 해결해야합니까?
MySQL을 배우고 LOAD DATA
절을 사용해 보았습니다 . 아래처럼 사용했을 때 :
LOAD DATA INFILE "text.txt" INTO table mytable;
다음과 같은 오류가 발생했습니다.
MySQL 서버가 --secure-file-priv 옵션으로 실행 중이므로이 명령문을 실행할 수 없습니다.
이 오류를 어떻게 해결합니까?
동일한 오류 메시지 에서 다른 질문을 확인 했지만 여전히 해결책을 찾을 수 없습니다.
MySQL 5.6을 사용하고 있습니다
의도 한대로 작동합니다. MySQL 서버는 --secure-file-priv 옵션 으로 시작되었으며 기본적으로를 사용하여 파일을로드 할 수있는 디렉토리를 제한합니다 LOAD DATA INFILE
.
SHOW VARIABLES LIKE "secure_file_priv";
구성된 디렉토리를 보는 데 사용할 수 있습니다 .
두 가지 옵션이 있습니다.
- 에서 지정한 디렉토리로 파일을 이동하십시오
secure-file-priv
. - 비활성화합니다
secure-file-priv
. 시작시 제거해야하며 동적으로 수정할 수 없습니다. 이렇게하려면 MySQL 시작 매개 변수 (플랫폼에 따라 다름)와 my.ini를 확인하십시오.
나는 같은 문제가 있었다. 마침내 LOCAL
명령 의 옵션을 사용하여 해결 했습니다.
LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
자세한 정보는 여기 http://dev.mysql.com/doc/refman/5.7/en/load-data.html에서 찾을 수 있습니다.
LOCAL이 지정되면 클라이언트 호스트의 클라이언트 프로그램이 파일을 읽고 서버로 보냅니다. 파일은 정확한 위치를 지정하기 위해 전체 경로 이름으로 제공 될 수 있습니다. 상대 경로 이름으로 제공된 경우 이름은 클라이언트 프로그램이 시작된 디렉토리를 기준으로 해석됩니다.
Ubuntu 14 및 Mysql 5.5.53에서이 설정은 기본적으로 활성화 된 것으로 보입니다. 비활성화하려면 secure-file-priv = ""
mysqld 구성 그룹에서 my.cnf 파일에 추가 해야합니다. 예 :-
[mysqld]
secure-file-priv = ""
데비안에서 MySQL5.7.11을 작업 중입니다. 디렉토리를 볼 수있는 명령은 다음과 같습니다.
mysql> SELECT @@global.secure_file_priv;
파일이 머신에 로컬 인 경우 명령에 LOCAL 을 사용하십시오.
LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
Windows 7 secure-file-priv
에서 vhu의 답변 에서 옵션 # 2 를 비활성화하는 데 도움이 된 것은 다음과 같습니다 .
- 로 이동하여 MySQL 서버 서비스를 중지하십시오
services.msc
. C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
내 경우에는 숨겨진 폴더였습니다)로 이동하십시오 .my.ini
메모장 에서 파일을 엽니 다.- 'secure-file-priv'를 검색하십시오.
- 줄 시작 부분에 '#'을 추가하여 줄을 주석 처리하십시오. MySQL Server 5.7.16 이상에서는 주석이 작동하지 않습니다. 다음과 같이 빈 문자열로 설정해야합니다.
secure-file-priv=""
- 파일을 저장하십시오.
- 로 이동하여 MySQL 서버 서비스를 시작하십시오
services.msc
.
v
나는 SHOW VARIABLES LIKE "secure_file_priv";
그것을 C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
연결했고 그것을 꽂았을 때 여전히 작동하지 않았다.
my.ini 파일로 직접 이동했을 때 경로의 형식이 약간 다르다는 것을 발견했습니다. C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
그런 다음 그것을 사용했을 때 효과가있었습니다. 유일한 차이점은 슬래시의 방향입니다.
'secure-file-priv'와 동일한 문제가있었습니다. .ini 파일의 주석 처리가 작동하지 않으며 'secure-file-priv'로 지정된 디렉토리에서 파일을 이동하지 않았습니다.
마지막으로 dbc가 제안한 것처럼 'secure-file-priv'를 빈 문자열과 동일하게 만들었습니다. 따라서 위의 답변을 시도한 후에 갇힌 사람이 있으면 도움이 될 것입니다.
나를 위해 일한 것 :
- 에 지정된 폴더 안에 파일을 넣습니다
secure-file-priv
.
해당 유형을 찾으려면
mysql>은 "secure_file_priv"와 같은 변수를 보여줍니다;
- 당신이 있는지 확인하십시오
local_infile = 1
.
입력하십시오 :
mysql>은 "local_infile"과 같은 변수를 보여줍니다;
당신이 얻는다면 :
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | OFF |
+---------------+-------+
그런 다음 하나의 입력으로 설정하십시오.
mysql> set global local_infile = 1;
- 파일의 전체 경로를 지정하십시오. 나의 경우에는:
mysql> "C : / ProgramData / MySQL / MySQL Server 8.0 / Uploads / file.txt"파일 데이터를 테이블 테스트로로드;
나는 이것에 모든 종류의 문제가있었습니다. 나는이 문제의 다른 버전에서 보여 주려고 my.cnf 및 모든 종류의 미친 것들을 변경하고있었습니다.
나를 위해 일한 것 :
내가 받고 있던 오류
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
/usr/local/mysql/support-files/mysql.server를 열고 다음 줄을 변경하여 문제를 해결할 수있었습니다.
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" -- $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
에
$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --secure-file-priv="" $other_args >/dev/null &
wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?
Windows 10에서이 문제가 발생했습니다. "--MySQL의 secure-file-priv"이 문제를 해결하려면 다음을 수행하십시오.
- Windows 검색 (왼쪽 하단)에서 "powershell"을 입력했습니다.
- powershell을 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행했습니다.
- 서버 bin 파일로 이동했습니다. (C : \ Program Files \ MySQL \ MySQL Server 5.6 \ bin);
- ./mysqld 입력
- "입력"을 누르십시오
서버가 예상대로 시작되었습니다.
MySQL은이 시스템 변수를 사용하여 파일을 가져올 수있는 위치를 제어합니다
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | NULL |
+------------------+-------+
문제는와 같은 시스템 변수를 변경하는 방법 secure_file_priv
입니다.
- 일시 휴업
mysqld
sudo mysqld_safe --secure_file_priv=""
이제 다음과 같이 보일 수 있습니다.
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_file_priv | |
+------------------+-------+
Ubuntu에서 실행중인 경우 MySQL이 폴더에 쓸 수 있도록 Apparmor를 구성해야 할 수도 있습니다 (예 : 여기 내 구성).
이 행을 /etc/apparmor.d/usr.sbin.mysqld 파일에 추가하십시오.
/var/lib/mysql-files/* rw
그런 다음이 2 개의 구성 줄을 /etc/mysql/my.cnf 섹션에 추가하십시오.
[client]
loose-local-infile = 1
[mysqld]
secure-file-priv = ""
내 SQL은 다음과 같습니다.
select id from blahs into outfile '/var/lib/mysql-files/blahs';
그것은 나를 위해 일했다. 행운을 빕니다!
mysql 8.0 버전의 경우 다음을 수행 할 수 있습니다.
- mysql.server 중지
- mysql.server start --secure-file-priv = ''
Mac High Sierra에서 나를 위해 일했습니다.
secure_file_priv를 확인하고, 사용자를 부여하고, 아웃 파일 yippeecode.com을 선택하는 방법에 대한 자세한 예
참고 URL : https://stackoverflow.com/questions/32737478/how-should-i-tackle-secure-file-priv-in-mysql
'Programing' 카테고리의 다른 글
자식 : 치명적 : 프로토콜 'http'를 처리하지 않습니다 (0) | 2020.03.17 |
---|---|
byte []를 Java로 파일로 (0) | 2020.03.17 |
다른 스레드의 메인 스레드에서 코드 실행 (0) | 2020.03.17 |
Bash의 파일에서 마지막 줄을 제거하십시오. (0) | 2020.03.17 |
"이 응용 프로그램은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다"오류가 발생합니까? (0) | 2020.03.17 |