2012-03-28 3 views
0

데이터베이스를 백업하려고 PHP exec 함수를 사용하고 있지만 작동하지 않는 것 같습니다. 다른 변형을 시도했습니다 :PHP를 통해 mysqldump가 실행되지 않는다

$dbuser = "root"; 
$dbpwd = "somepass"; 
$dbhost = "localhost"; 
$db = "somedb"; 
$dir = "/var/www/backup/"; 
$filename = $db.".sql"; 

exec('/usr/bin/mysqldump -u '.$dbuser.' -p'.$dbpwd.' -h '.$dbhost.' '.$db.' > '.$dir.$filename); 

이것은 루트로 로그인 한 SSH를 통해 작동합니다. -p는 공백으로 작동하지 않는 것 같아서, 내가 빼앗 았을 때 SSH를 통해 작동했습니다. PHP에서 exec에서 whoami를 실행하면 아파치가 생깁니다. 그것이 문제일까요? 그렇다면 어떻게 수정하겠습니까?

이것은 리눅스 박스입니다. PHP 스크립트에서 오류가 발생하지 않습니다 (꼭 display_errors를 설정하십시오). 그리고 exec 명령은 아무것도 표시하지 않습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

php에서 전체 명령을 인쇄하고 아파치 또는 PHP 사용자로서 직접 실행하십시오. 이렇게 구성하지 않으면 root가 아닙니다. –

+0

나는 루트를 통해서만 명령을 인쇄하여 실행했다. 파일은 소유되어 있으며 그룹 루트의 일부입니다. db 사용자 및 암호 root 로그인 세부 정보를 사용하고 있습니다. 나는 그것을 위해 아무 것도 설정하지 않았기 때문에 아파치로 로그인하는 방법을 모르겠습니다. – fanfavorite

+2

'sudo -u apache/usr/bin/mysqldump ...'를 사용합니다. 여기서 apache는 실행하고자하는 사용자이고 –

답변

0

다른 사용자가 아닌 루트 사용자로 로그인 한 상태에서 동일한 사용자, 패스 등의 다른 명령이 없다는 것이 확실한 경우 가장 큰 문제는 사용 권한입니다. 이 경우 파일이 저장되는 디렉토리입니다.

0

못생긴 해결책 : 업데이트 (drop, etc ... powers가 아닌) 만 읽을 수있는 mysql 사용자를 만들고 패스워드가 필요없고 localhost에서 연결하는 것이 제한되어 있습니다. 따라서 -p 매개 변수는 필요 없습니다.

관련 문제