Каждую ночь я делаю резервную копию своей базы данных, используя следующую команду. Я создаю 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);
РЕДАКТИРОВАТЬ:
PHP-код, выполняемый после passthru()
срабатывает только после passthru()
закончен.
Другая полезная информация заключается в том, что passthru()
может принять второй аргумент return_var
который возвращает статус команды.
Пара замечаний:
0 означает статус, успешно возвращенный для команд Unix.
второй аргумент за passthru()
возвращает значение по ссылке, поэтому, пожалуйста, передайте объявленную переменную в функцию.
Пример:
$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
Других решений пока нет …