2013-06-15 3 views
0

테이블에서 CSV 파일을 만드는 저장 프로 시저를 만들었습니다.MySQL에서 파일을 만들거나 쓸 수 없습니다.

이 저장 프로 시저입니다 :

CREATE DEFINER = `root`@`localhost` PROCEDURE `DO_BACKUP` (IN `table_name` TEXT) 
NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER 
BEGIN 
SET @sql = CONCAT( 'SELECT * FROM ', table_name, ' INTO OUTFILE \'/home/aimad/GestionStock/', DATE_FORMAT(CURDATE() , '%Y%m%d') , '_', table_name, '.csv\'') ; 

    PREPARE stmt FROM @sql ; 

    EXECUTE stmt; 

    DEALLOCATE PREPARE stmt; 

END 

하지만 난 그게 매개 변수의에서 TABLE_NAME에 의해이 저장 프로 시저를 호출 할 때, 나는이 오류를 얻을 :

가 쓰기/생성 할 수 없음을 파일 '/home/aimad/GestionStock/20130615_BonInterne.csv'(errcode를 : 13)

편집 :

내가 사용 OS는 당신도 허가 또는 우주 관련 문제가, here 언급 한 바와 같이 리눅스 분투 13.04

+0

사용중인 OS에 대한 질문 업데이트 –

+0

@DavidJashi 완료되었습니다. –

답변

0

입니다.

+0

예,이 문제에 대해봤을 때이 기사를 보았습니다.하지만 필자가해야 할 내용을 알지 못했습니다. 이'line [mysqld] tmpdir = C :/temp'를 내 옵션 파일에 추가하십시오. 어디에서 찾을 수 있을지 모르겠습니다. –

+0

다시 오시겠습니까? 특히 찾을 수없는 것은 무엇입니까? –

+0

그 파일에'[mysqld] tmpdir =' –

0

SELinux를 활성화 한 경우 mysql은 적절한 컨텍스트가없는 한 디렉토리에 쓰지 않습니다. 먼저 명령 프롬프트에서 'getenforce'를 입력하십시오. 'Enforcing'을 반환하면 SELinux가 활성화되고 읽고 쓰려고하는 디렉토리에 특정 SELinux 컨텍스트를 적용해야합니다. 이것은 올바른 권한을 갖는 것입니다. 디렉토리로 이동하여 'ls -Z'를 입력하면 SELinux 구문이 표시됩니다. object_r 컨텍스트를 살펴보십시오. mysqld_db_t가 아닌 경우 프로세스는 권한에 관계없이 디렉토리를 읽고 쓸 수 없습니다.

컨텍스트를 설정할 수 있도록 'semanage'명령이 설치되어 있는지 확인하십시오. SELinux 파일 컨텍스트가 mysql에 대해 어떻게 보이는지 보려면 명령 프롬프트에서 루트로 다음을 입력하십시오.

semanage fcontext -l | grep mysql

꽤 많은 행이 표시되지만 mysql이 쓸 수있는/var/lib/mysql을 특별히보아야합니다. 이 디렉토리의 fcontext는 mysqld_db_t입니다. 이것은 프로세스가 읽고 쓰고 자하는 디렉토리에 적용해야하는 것입니다. 다음과 같이하십시오.

semanage fcontext -a -t mysqld_db_t '/somedir(/.*)?'

디렉토리 주위에 작은 따옴표를 잊지 마십시오. 다음으로 fcontext가이 디렉토리에 재귀 적으로 적용되는지 확인하려고합니다. 다음 입력 :

restorecon -RFvv/somedir

를이 기존의 모든 파일과 하위 디렉토리가 적절한 fcontext을 보장합니다. MySQL은 읽고 쓸 수있는 권한이 올바른지 가정합니다. 처음으로이 작업을 수행 할 때 누구나 읽을 수 있도록 디렉토리 설정을했기 때문에 내가 쓸어 버렸지 만 쓸 수는 없었습니다. 그래서 mysql 'infile'명령을 사용할 수 있었지만 'outfile'명령은 사용할 수 없었습니다. 사용자 mysql이 디렉토리에 쓸 수 있는지 확인하십시오.

SELinux를 신경 쓰지 않는다면이 기능을 끄고 위에서 설명한 모든 것을 피할 수 있습니다. 나는 보안의 추가 레이어가 마음에 든다. 그래서 나는 함께 작업한다.

관련 문제