Я использую mysqldump как часть сценария PHP, называемого через задание Cron. Или можно назначить stderr output или return_var команды exec () ?
Код: Выделить всё
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" | gzip -c > dumpfile.sql.gz';
exec( $dump_cmd, $dump_cmd_output, $dump_cmd_return_var );
< /code>
output
Код: Выделить всё
$dump_cmd_output< /code> пуст, потому что вывод пробивается на Gzip. < /p>
$dump_cmd_return_var< /code> Показывает статус возврата из GZIP. < /p>
Я знаю о других подходах, чтобы увидеть, были ли какие -либо ошибки, которые были подняты, когда MySqldump запускался: < /p>
Я могу просто сделать дамп, чтобы проверить $ dillmd_retr gzip в качестве дополнительной команды. < /p>
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" --result-file="dumpfile.sql"';
$zip_cmd = 'gzip dumpfile.sql';
exec( $dump_cmd, $dump_cmd_output, $dump_cmd_return_var );
if($dump_cmd_return_var == 0) {
exec( $zip_cmd, $zip_cmd_output, $zip_cmd_return_var );
}
< /code>
Я могу отправлять stderr < /code> из mysqldump в файл с помощью опции--log-error = dillmerrors.txt < /code> < /p>
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" --log-error=dump_errors.txt | gzip -c > dumpfile.sql.gz';
< /code>
или отправив stderr < /code> в файл перед трубой 2> dimp_errors.txt < /code>: < /p>
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" 2> dump_errors.txt | gzip -c > dumpfile.sql.gz';
< /code>
или я могу попытаться использовать proc_open () < /code>. Хотя я ожидаю, что у меня будет такая же проблема, с которой я столкнулся с exec ()
Это было бы чище (менее сложным), если какие -либо ошибки были возвращены напрямую или отправлены в переменную, доступную из сценария, поэтому мне любопытно, если это возможно. /> Решение: < /strong> < /p>
@user1281385 имеет отличное решение. Чтобы лучше понять это, я выполнил поиск:
"bash pipestatus [0]" < /p>
один результат использовал этот точный сценарий (Mysqldump pip to Gzip). Вот ссылка для всех, кто хочет больше информации:
bash - Как проверить статус выхода команды Pipe < /p>
Вот как я использую: < /p>
$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" | gzip -c > dumpfile.sql.gz';
system("bash -c '".$dump_cmd." ; exit \${PIPESTATUS[0]}'", $dump_cmd_return);
if($dump_cmd_return == 0) {
Do some other stuff;
}
< /code>
Basically, the mysqldump command is the first one performed, so its return value is stored as the first value ( key [0] ) of the PIPESTATUS array.
Подробнее здесь: https://stackoverflow.com/questions/141 ... ump-stderr