2010-02-15 4 views
5

SELECT ... INTO OUTFILE 문에 일부 사용 권한 문제가 있습니다.MySQL에서 작성/쓰기 권한

내 데이터베이스에 로그인하여 간단한 내보내기 명령을, 예를 들면 : 그러나

ERROR 1 (HY000): 
Can't create/write to file '/home/mropa/Photos/Desktop/TEST.txt' 
(Errcode: 13) 

, 단순히 쓰기 :

mysql> select * from XYZ into outfile 'TEST.txt'; 
Query OK, 8287 rows affected (0.73 sec) 
mysql> select * from XYZ into outfile '/home/mropa/Photos/Desktop/TEST.txt'; 

가 나는 응답을 얻을

파일은 /var/lib/mysql/XYZ 디렉토리에 기록됩니다. /etc/apparmor.d/usr.sbin.mysqld mysql이 읽기 및 쓰기 권한을 정의하는 것으로 보이지만 실제로 수정하는 방법을 모르겠습니다.

내가 좋아하는 디렉토리에 mysql 테이블을 내보낼 수있는 권한을 어떻게 부여 할 수 있습니까?

답변

4

문제는 디렉토리 사용 권한입니다. mysqld가 current_user로 실행되지 않는다. mysqld 사용자를 대상 디렉토리에 쓰기 권한이있는 그룹에 추가한다. (편리하지만 안전하지는 않음), 또는 아웃 파일을 작성하기 전후에 목표 디렉토리 권한을 변경해야한다.

+0

@dnagirl 보통 mysql -u mropa -p 명령으로 mysql을 시작하므로 사용자는 쓰기 권한이 있어야하는 'mropa'입니다. 대답을 조금 더 자세히 설명해 주시겠습니까? 완전히 이해하지 못합니다. 감사. – mropa

+1

@mropa : mysql -u mropa -p를 할 때 mysqld 프로세스를 시작하지 않는다. 당신은 그것에 로그인하고 있습니다. outfile에 쓸 때, 쓰는 로그인 사용자가 아니라면, 그것은 mysqld 프로세스이다. mropa로 쉘에 로그인 한 다음 mysql에 mydb_user로 로그인한다고 가정 해보십시오. mysql에서 outfile에 쓸 때 mropa 나 mydb_user는 글을 쓰고 있지 않습니다. 작성자는 mysqld 프로세스의 소유자이다. – dnagirl

+0

도움이 되셨습니다. 감사합니다! – mropa

1

특정 폴더에 대한 액세스 권한이없는 것 같습니다. 특정 위치의 그룹 소유자에게 mysql을 추가해야한다. 나는 아래 모르는

어떤 사용자는, 그러나, 아래에 MySQL의를 실행하는

대한 Chown mysql을 :에서 MySQL/홈/mropa/사진/데스크탑/로그는 MySQL 사용자와 MySQL 그룹 소유자 의미 권한이 있습니다. 그런 다음 사용 권한에 쓰기가 포함되어 있는지 확인해야하지만 충분해야합니다.

Chown Command

2

당신이 (보통 "MySQL은")를 mysqld를 실행중인 사용자가 쓰기 가능한 디렉토리를 만들고 거기에 파일을 쓸 수 있습니다. intance의 경우 :

chmod a+w /home/mropa/mysql 
1

은 AppArmor의 프로파일을 비활성화/디버깅에 대한 자세한 내용은 https://wiki.ubuntu.com/DebuggingApparmor를 참조하십시오.

특히 화제가 아닙니다. mysqld가 실행중인 사용자는 지정한 폴더에 쓸 수있는 권한이 없을 수있다. 대상 디렉토리/파일에 대한 권한을 확인하십시오.

0

mysql은 대개 사용자 mysqld에서 실행됩니다. 권한은 apparmor로 직접 해결할 수 있습니다. this answer