Programing

MySQL에서 --secure-file-priv를 어떻게 해결해야합니까?

lottogame 2020. 3. 17. 08:31
반응형

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";구성된 디렉토리를 보는 데 사용할 수 있습니다 .

두 가지 옵션이 있습니다.

  1. 에서 지정한 디렉토리로 파일을 이동하십시오 secure-file-priv.
  2. 비활성화합니다 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 를 비활성화하는 데 도움이 된 것은 다음과 같습니다 .

  1. 로 이동하여 MySQL 서버 서비스를 중지하십시오 services.msc.
  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. 로 이동하여 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'를 빈 문자열과 동일하게 만들었습니다. 따라서 위의 답변을 시도한 후에 갇힌 사람이 있으면 도움이 될 것입니다.


나를 위해 일한 것 :

  1. 에 지정된 폴더 안에 파일을 넣습니다 secure-file-priv.

해당 유형을 찾으려면

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


  1. 당신이 있는지 확인하십시오 local_infile = 1.

입력하십시오 :

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

당신이 얻는다면 :

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

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

mysql> set global local_infile = 1;


  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"이 문제를 해결하려면 다음을 수행하십시오.

  1. Windows 검색 (왼쪽 하단)에서 "powershell"을 입력했습니다.
  2. powershell을 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행했습니다.
  3. 서버 bin 파일로 이동했습니다. (C : \ Program Files \ MySQL \ MySQL Server 5.6 \ bin);
  4. ./mysqld 입력
  5. "입력"을 누르십시오

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


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 |       |
+------------------+-------+

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 버전의 경우 다음을 수행 할 수 있습니다.

  1. mysql.server 중지
  2. 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

반응형