>백엔드 개발 >PHP 튜토리얼 >mysql secure-file-priv 옵션 문제에 대한 솔루션

mysql secure-file-priv 옵션 문제에 대한 솔루션

jacklove
jacklove원래의
2018-06-15 17:34:108914검색

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

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

로 내보낼 수 있습니다. 사용자 테이블은 /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)

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

mysql> select * from user into outfile '/tmp/user.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\r\n';
Query OK, 15 rows affected (0.00 sec)

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

로 내보낼 수 있습니다. 사용자 테이블의 데이터는 /tmp/user .csv로 내보내집니다.

이 기사에서는 mysql5.7 내보내기 데이터 프롬프트 --secure-file-priv 옵션 문제에 대한 해결 방법을 설명합니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트를 참고하세요.

관련 권장 사항:

php는 debug_backtrace 메서드를 사용하여 코드 호출을 추적합니다.

mysql 터미널에서 SQL을 실행하고 결과를 파일에 쓰는 방법

php는 토큰 버킷 알고리즘을 사용하여 구현합니다. redis 기반 흐름 제어

위 내용은 mysql secure-file-priv 옵션 문제에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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