wake-up-neo.com

MySQL에서 - secure-file-priv는 어떻게 다루어야합니까?

MySQL을 배우고 LOAD DATA 절을 사용하려고했습니다. 아래와 같이 사용했을 때 :

LOAD DATA INFILE "text.txt" INTO table mytable;

다음과 같은 오류가 발생했습니다.

MySQL 서버는 --secure-file-priv 옵션으로 실행되므로이 ​​명령문을 실행할 수 없습니다

이 오류를 어떻게 해결할 수 있습니까?

동일한 오류 메시지에 대해 다른 질문 을 (를) 확인했지만 해결책을 찾을 수 없습니다.

MySQL 5.6을 사용하고 있습니다.

264
Mohit Bhasi

의도 한대로 작동합니다. MySQL 서버는 --secure-file-priv 옵션으로 시작되었습니다. 기본적으로 LOAD DATA INFILE를 사용하여 파일을로드 할 수있는 디렉토리를 제한합니다.

SHOW VARIABLES LIKE "secure_file_priv";를 사용하여 구성된 디렉토리를 볼 수 있습니다.

두 가지 옵션이 있습니다.

  1. 파일을 secure-file-priv로 지정된 디렉토리로 이동하십시오.
  2. secure-file-priv을 비활성화하십시오. 시작시 제거해야하며 동적으로 수정할 수 없습니다. 이 작업을 수행하려면 MySQL 시작 매개 변수 (플랫폼에 따라 다름)와 my.ini를 확인하십시오.
357
vhu

나는 같은 문제가 있었다. 나는 마침내 명령에서 LOCAL 옵션을 사용하여 해결했습니다.

LOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;

여기에서 자세한 정보를 찾을 수 있습니다 http://dev.mysql.com/doc/refman/5.7/en/load-data.html

LOCAL이 지정되면 파일은 클라이언트 호스트의 클라이언트 프로그램에서 읽고 서버로 전송됩니다. 정확한 위치를 지정하기 위해 파일을 전체 경로 이름으로 지정할 수 있습니다. 상대 경로 이름으로 주어지면 이름은 클라이언트 프로그램이 시작된 디렉토리를 기준으로 해석됩니다.

187
Staza

Ubuntu 14와 Mysql 5.5.53에서이 설정은 기본적으로 활성화되어있는 것 같습니다. 이를 비활성화하려면 mysqld config 그룹 아래의 my.cnf 파일에 secure-file-priv = ""를 추가해야합니다. 예 : -

[mysqld]
secure-file-priv = ""
94
Mustafa

나는 데비안에서 MySQL5.7.11을 작업하고 있는데, 디렉토리를보기 위해 내가했던 명령은 :

mysql> SELECT @@ global.secure_file_priv;

29
Carlos Med

파일이 컴퓨터에 로컬 인 경우 명령에서LOCAL를 사용하십시오

LOAD DATA LOCAL INFILE "text.txt" INTO table mytable;
16
garyrgilbert

다음은 Windows 7에서 secure-file-priv ( vhu 's answer )의 옵션 # 2를 사용하지 않도록 설정 한 것입니다.

  1. services.msc로 이동하여 MySQL 서버 서비스를 중단하십시오.
  2. C:\ProgramData\MySQL\MySQL Server 5.6 (ProgramData은 내 케이스의 숨겨진 폴더)로 이동하십시오.
  3. my.ini 파일을 메모장에서 엽니 다.
  4. 'secure-file-priv'를 검색하십시오.
  5. 줄 시작 부분에 '#'을 추가하여 줄을 주석 처리하십시오. MySQL Server 5.7.16 이상에서는 주석 처리가 작동하지 않습니다. 이 문자열을 빈 문자열로 설정해야합니다 - secure-file-priv=""
  6. 파일을 저장하십시오.
  7. services.msc로 이동하여 MySQL 서버 서비스를 시작하십시오.
14
Ramnath

나는 'secure-file-priv'와 같은 문제를 안고 있었다. .ini 파일의 주석 처리가 작동하지 않았으며 'secure-file-priv'에 지정된 디렉토리에서 파일을 이동하지 않았습니다.

마지막으로 dbc가 제안한대로 'secure-file-priv'를 빈 문자열과 동일하게 만드는 작업이 이루어졌습니다. 그래서 위의 답변을 시도한 후에 누군가가 갇혀 있다면 잘하면 도움이 될 것입니다.

7
Rsc Rsc

나를 위해 일한 것 :

  1. secure-file-priv에 지정된 폴더 안에 파일을 저장하십시오.

해당 유형을 찾으려면 다음을 수행하십시오.

mysql> "secure_file_priv"와 같은 변수를 보여줍니다;


  1. local_infile = 1가 있는지 확인하십시오.

그 타이핑 :

mysql> "local_infile"과 같은 변수를 보여줍니다;

얻을 경우 :

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | OFF   |
+---------------+-------+

그런 다음 하나의 입력으로 설정하십시오.

mysql> 전역 설정 local_infile = 1;


  1. 파일의 전체 경로를 지정하십시오. 나의 경우에는:

mysql> 데이터를 infile "C :/ProgramData/MySQL/MySQL 서버 8.0/Uploads/file.txt"테이블 테스트에로드;

4
Vinícius Souza

나는 이것에 모든 종류의 문제가 있었다. 나는이 문제의 다른 버전이 보여 주려고했던 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=$?
3
notthehoff

@vhu

나는 SHOW VARIABLES LIKE "secure_file_priv";하고 그것을 C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ 반환 그래서 내가 그것을 꽂았지만, 여전히 작동하지 않았다.

My.ini 파일을 직접 방문했을 때 경로가 약간 다르게 형식화되어 있음을 발견했습니다. C:/ProgramData/MySQL/MySQL Server 8.0/Uploads

그런 다음 그것을 실행했을 때 효과가있었습니다. 유일한 차이점은 슬래시의 방향입니다.

2
wolfsshield

Windows 10에서이 문제가 발생했습니다. "--secure-file-priv in MySQL"이 문제를 해결하기 위해 다음을 수행했습니다.

  1. Windows 검색 (왼쪽 하단)에서 "powershell"을 입력했습니다.
  2. Powershell을 마우스 오른쪽 버튼으로 클릭하고 admin으로 실행했습니다.
  3. 서버 bin 파일로 이동합니다. (C :\Program Files\MySQL\MySQL 서버 5.6\bin);
  4. 입력 된 ./mysqld
  5. 히트 "enter"

서버가 예상대로 시작되었습니다.

1
Jason Allshorn

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';

그것은 나를 위해 일했다. 행운을 빕니다!

1
Kevin Hutchinson

MySQL은이 시스템 변수를 사용하여 파일을 가져올 수있는 위치를 제어합니다.

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv | NULL  |
+------------------+-------+

문제는 secure_file_priv와 같은 시스템 변수를 변경하는 방법입니다.

  1. 종료 mysqld
  2. Sudo mysqld_safe --secure_file_priv=""

이제 다음과 같이 보일 것입니다 :

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1
bitfishxyz

Mysql 8.0 버전의 경우 다음을 수행 할 수 있습니다.

  1. mysql.server 중지
  2. mysql.server start --secure-file-priv = ''

Mac High Sierra에서 나를 위해 일했습니다.

0
Ruslan Krupenko