Ubuntu 18.04에서 실행되는 내 프로그램이 실행됩니다.select 문은 출력 파일에 배치됩니다.내 /home/tmp 디렉토리에 있지만 mysql에서 생성된 모든 파일은 잠겨 있습니다. 수동으로 잠금을 해제할 수 있지만 우리 프로그램은 파일이 생성되는 즉시 파일을 읽어야 하므로 생성 시 잠금을 해제해야 합니다.
폴더 권한을 777로 설정했지만 새로 생성된 모든 파일이 여전히 잠겨 있습니다. 이 파일은 mysql 서버가 소유하며 "다른" 사용자에게는 액세스 권한이 없습니다. 이 권한은 내 것이 아니기 때문에 변경할 수 없습니다.
실행 중인 mysql 서버는 v8.0.18입니다.
my.cnf에서 secure_file_priv를 이 /home/tmp 폴더 경로로 설정했습니다.
mysql 서버 5.7.27을 사용하여 다른 컴퓨터에서 동일한 프로그램을 실행하고 있는데 파일이 잠겨 있지 않아 문제가 무엇인지 잘 모르겠습니다.
도와주세요! 감사해요.
편집하다: 설명
- "잠김"은 파일에서 파일을 볼 때 아이콘에 자물쇠 기호가 있음을 의미합니다.
- 파일을 열려고 할 때 "액세스 "/home/tmp/filename"이 거부되었습니다라는 오류 메시지가 나타납니다.
- 내 선택 문은 "SELECT * INTO OUTFILE '/home/tmp/file.csv' 필드가 '로 종료되고, 선택적으로 ''' 행으로 묶이고 '\n' FROM 장치로 종료됨"과 같습니다.
답변1
MySQL 문서에서 이 설명을 본 적이 있습니다(참조:https://dev.mysql.com/doc/refman/8.0/en/select-into.html):
MySQL 8.0.17부터 파일 생성을 위한 umask는 0640입니다. 파일 내용을 조작하려면 충분한 액세스 권한이 있어야 합니다. MySQL 8.0.17 이전에는 umask가 0666이었고 서버 호스트의 모든 사용자가 파일에 쓸 수 있었습니다.
따라서 이러한 파일은 MySQL이 실행되는 그룹에서만 읽을 수 있습니다. 이 그룹에 사용자를 추가할 수 있지만 이렇게 하면 필요한 것보다 더 많은 액세스 권한이 제공될 수 있습니다(예: 데이터베이스 데이터 파일에 대한 직접 액세스).
파일 시스템이 ACL을 지원하는 경우(대부분 지원), 또 다른 옵션은 기본 ACL이 MySQL에서 설정한 권한을 재정의하는지 확인하는 것입니다. 덤프가 기록되는 디렉터리에서 다음을 시도하십시오.
sudo setfacl -m 'd:u:«YOUR-USER»:r' /home/tmp
/home/tmp
이렇게 하면 "사용자"가 읽을 수 있도록 생성된 모든 파일에 자동으로 ACL을 배치하도록 "기본" ACL이 설정됩니다 . 당신도 그들에게 글을 써야 한다면, 그것을 사용할 수 있습니다 rw
.