>  기사  >  데이터 베이스  >  Mysql5.7 내보내기 데이터 프롬프트 --secure-file-priv 옵션 문제 해결 방법

Mysql5.7 내보내기 데이터 프롬프트 --secure-file-priv 옵션 문제 해결 방법

jacklove
jacklove원래의
2018-06-08 15:59:5016292검색

mysql은 into outfile 매개변수를 사용하여 테이블의 데이터를 csv로 내보낼 수 있습니다. 예를 들어 다음 명령을 사용하여 사용자 테이블의 데이터를 user.csv

select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n

로 내보낼 수 있습니다. user 테이블의 내용은 /tmp/user로 내보내집니다.
매개변수 설명:

'내보낸 디렉터리 및 파일 이름'으로 outfile
내보낸 디렉터리 및 파일 이름 지정

'필드 구분 기호'로 끝나는 필드
필드 사이 구분 기호 정의

선택적으로 '로 묶음 필드 래퍼'
필드 주변 문자 정의(숫자 필드는 유효하지 않음)

'행간 구분 기호'로 끝나는 줄
각 줄의 구분 기호 정의
문제 분석

위 명령이 들어 있습니다. 문제가 없습니다. mysql5.6에서 실행하면 되지만, mysql5.7에서 실행하면 다음과 같은 오류가 발생합니다.

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

공식 문서를 보면 secure_file_priv 매개변수가 LOAD DATA, SELECT...OUTFILE, LOAD_FILE()이 전달되는 지정된 디렉터리를 제한하는 데 사용됩니다.

  • secure_file_priv가 NULL이면 mysqld의 가져오기 또는 내보내기가 제한된다는 의미입니다.

  • secure_file_priv가 /tmp이면 이는 mysqld가 /tmp 디렉토리에서만 가져오기 및 내보내기를 실행하도록 제한되어 있으며 다른 디렉토리에서는 실행할 수 없음을 의미합니다.

  • secure_file_priv 값이 없으면 이는 mysqld가 어떤 디렉터리에서도 가져오기 및 내보내기가 제한되지 않음을 의미합니다.

secure_file_priv 값을 확인하세요. 기본값은 NULL이며, 이는 제한 사항을 가져오거나 내보낼 수 없음을 의미합니다.

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv | NULL  |
+------------------+-------+1 row in set (0.00 sec)

secure_file_priv 매개변수는 읽기 전용 매개변수이고 set global 명령을 사용하여 수정할 수 없기 때문입니다.

mysql> set global secure_file_priv='';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

Solution

my.cnf 또는 my.ini을 열고 다음 명령문을 추가하고 mysql을 다시 시작하세요.

secure_file_priv=''

secure_file_priv 수정된 값을 확인하세요.

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv |       |
+------------------+-------+1 row in set (0.00 sec)

수정 후 다시 실행하여 내보내기에 성공하세요.

';

실행 후 사용자 테이블의 데이터가 /tmp/user.csv로 내보내집니다.
매개변수 설명:

'내보낸 디렉터리 및 파일 이름'으로 outfile
내보낸 디렉터리 및 파일 이름을 지정합니다.

'필드 구분 기호'로 끝나는 필드
필드 사이 구분 기호를 정의합니다

선택적으로 '로 묶습니다. field Wrapper'
필드 주변 문자 정의(숫자 필드는 유효하지 않음)

'행간 구분 기호'로 끝나는 줄
각 줄의 구분 기호 정의
문제 분석

위 명령이 들어 있습니다. 문제가 없습니다. mysql5.6에서 실행하면 되지만, mysql5.7에서 실행하면 다음과 같은 오류가 발생합니다.

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

공식 문서를 보면 secure_file_priv 매개변수가 LOAD DATA, SELECT …OUTFILE, LOAD_FILE()이 전달되는 지정된 디렉터리를 제한하는 데 사용됩니다.

  • secure_file_priv가 NULL이면 mysqld의 가져오기 또는 내보내기가 제한된다는 의미입니다.

  • secure_file_priv가 /tmp인 경우, mysqld는 /tmp 디렉토리에서만 가져오기 및 내보내기를 실행하도록 제한되어 있으며 다른 디렉토리에서는 실행할 수 없음을 의미합니다.

  • secure_file_priv 값이 없으면 이는 mysqld가 어떤 디렉터리에서도 가져오기 및 내보내기가 제한되지 않음을 의미합니다.

secure_file_priv 값을 확인하세요. 기본값은 NULL이며, 이는 제한 사항을 가져오거나 내보낼 수 없음을 의미합니다.

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv | NULL  |
+------------------+-------+1 row in set (0.00 sec)

secure_file_priv 매개변수는 읽기 전용 매개변수이고 set global 명령을 사용하여 수정할 수 없기 때문입니다.

mysql> set global secure_file_priv='';
ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

Solution

my.cnf 또는 my.ini을 열고 다음 명령문을 추가하고 mysql을 다시 시작하세요.

secure_file_priv=''

secure_file_priv 수정된 값을 확인하세요.

mysql> show global variables like '%secure_file_priv%';
+------------------+-------+| Variable_name    | Value |
+------------------+-------+| secure_file_priv |       |
+------------------+-------+1 row in set (0.00 sec)

수정 후 다시 실행하여 내보내기에 성공하세요.

rreee

위 내용은 Mysql5.7 내보내기 데이터 프롬프트 --secure-file-priv 옵션 문제 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.