2016-07-19 3 views
2

매일 밤 나는 다음 명령을 사용하여 데이터베이스 백업을 수행한다. 이 백업 파일을 매일 밤 오프 사이트로 ftp하지만 덤프 소요 시간을 모르기 때문에 ftp 세션을 시작하는 것이 안전한 지 전혀 알 수 없습니다. 아직 사용 중이거나 진행중인 덤프에 대한 MySQL의 쿼리입니다 $filename 여부를 테스트 - 예를 들어,mysqldump가 완료 될 때를 알려주는 방법

mysqldump이 완료되면 알려줄 수 php 어떤 방법이 있습니까?

미리 감사드립니다.

$command = "mysqldump -h " . DB_SERVER . " -u ". DB_USER ." -p". DB_PASS ." --add-drop-table --quick --set-gtid-purged=OFF " . DB_NAME . " > ". $filename; 

$result = passthru($command); 

답변

0

백업 로그 파일을 만드는 방법은 어떻습니까? 이 같은

$command = "mysqldump -h " . DB_SERVER . " -u ". DB_USER ." -p". DB_PASS ." --add-drop-table --quick --set-gtid-purged=OFF " . DB_NAME . " > ". $filename; 
$result = passthru($command); 

$file = fopen('backup-file-name', 'a'); // can specify full path 
fwrite($file, date('M-d-Y h:i:s') . " -- backup finished \n"); 
fclose($file); 

또는 뭔가 :

// open file and say it's in progress 
$file = fopen('backup-file-name', 'w'); // can specify full path 
fwrite($file, date('M-d-Y h:i:s') . " -- backup in progress \n"); 
fclose($file); 

$command = "mysqldump -h " . DB_SERVER . " -u ". DB_USER ." -p". DB_PASS ." --add-drop-table --quick --set-gtid-purged=OFF " . DB_NAME . " > ". $filename; 
$result = passthru($command); 

// open file and say that backup is done 
$file = fopen('backup-file-name', 'w'); // can specify full path 
fwrite($file, date('M-d-Y h:i:s') . " -- backup finished \n"); 
fclose($file); 

편집 : passthru()이 완료된 후 passthru()에만 트리거 후에 실행

PHP 코드.

또 다른 유용한 정보는 passthru()이 명령의 상태를 반환하는 두 번째 인수 return_var을 취할 수 있다는 것입니다.

커플 노트 :

  • 0 상태가 유닉스 명령을 성공적으로 반환을 의미합니다.

  • passthru()에 대한 second argument은 참조로 값을 반환하므로 함수에 선언 된 변수를 전달하십시오.

예 : 당신의 대답에서

$command_status = 'N/A'; 
$result = passthru($command, $command_status); 
// then check if $command_status value === 0 
// maybe log the status of the command as well 
+0

, 나는 다음 덤프가 완료 될 때까지'경유()'PHP 스크립트로 다시 제어를 반환하지 않음을 수집합니다. 옳은? 나는 그것이 쓰레기통이라고 생각했다. 그렇다면 예제가 정상적으로 작동합니다. 나는 cron 작업의 일부로 이것을 사용합니다. 방해하지 않을 것입니다 (예 : 시간 초과 등). – mseifert

+0

cron을 사용하고 있기 때문에 문제가있을 것이라고 생각하지 않습니다. 그러나 로그 파일을 사용하여 cron 작업에 대한 정보를 저장하는 것은 디버깅과 문제가 발생할 경우 어떤 일이 발생했는지 파악하는 데있어 필수적입니다. (참고 : 심지어 완료 후에도 이메일을 보낼 수 있습니다 : http://php.net/manual/en/function.mail.php). –

+0

대답은 내가 상상했던 것보다 간단했다. 이미 백업 작업의 시작을 기록했습니다. 결말을 기록하는 것은 간단한 문제입니다. 보다 완벽한 답변을 보내 주셔서 감사합니다. – mseifert

관련 문제