如何判断 mysqldump 何时完成

How to tell when mysqldump is complete

每天晚上我都会使用以下命令备份我的数据库。我每晚都 ftp 在异地备份文件,但我不知道何时可以安全地开始 ftp 会话,因为我不知道转储需要多长时间。

php 是否有任何方法可以判断 mysqldump 何时完成 - 例如测试 $filename 是否仍在使用或查询 mysql 中的转储进步?

提前致谢。

$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);

创建备份日志文件如何?

$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()之后执行的PHP代码仅在passthru()完成后触发。

另一个有用的信息是 passthru() 可以使用第二个参数 return_var 来 returns 命令的状态。

夫妇注意事项:

  • 0表示Unix命令返回成功

  • second argument对于passthru()returns的值是引用,所以请传递一个声明的变量给函数。

示例:

$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