Запустите Mysqldump через php exec (), труба в Gzip, вернуть mysqldump stderrPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Запустите Mysqldump через php exec (), труба в Gzip, вернуть mysqldump stderr

Сообщение Anonymous »

см. Внизу для решения

Я использую 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
и return_var from exec () не полезны:

Код: Выделить всё

$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 () 
, статус возврата выполненной команды (return_var< /code>) показывает состояние, возвращаемое Gzip. < /p>



Это было бы чище (менее сложным), если какие -либо ошибки были возвращены напрямую или отправлены в переменную, доступную из сценария, поэтому мне любопытно, если это возможно. /> Решение: < /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»