Run mysqldump via php exec (), pipe to gzip, return mysqldump stderr

See below for solution.

I am running mysqldumpas part of a PHP script called using a cron job.

Is it possible to return stderrmysqldump from the command, perhaps assign it to a variable that can be read directly? Or can I assign a stderrbutton outputor return_varcommand exec()?

Used main commands:

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

outputand return_varfrom exec()do not help:

$dump_cmd_output empty because the output is passed to gzip.

$dump_cmd_return_var shows the return status from gzip.


I know other approaches to see if there were any errors that occurred while starting mysqldump:

gzipping , $dump_cmd_return_var , gzip .

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

stderr mysqldump --log-error=dump_errors.txt mysqldump:

$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" --log-error=dump_errors.txt | gzip -c > dumpfile.sql.gz';

, stderr 2> dump_errors.txt:

$dump_cmd = 'mysqldump -u username -pPassword db_name --tables db_table --where="field1 = abc" 2> dump_errors.txt | gzip -c > dumpfile.sql.gz';

proc_open(). , , exec(), (return_var) , gzip.


( ), - , script, , .


:

@user1281385 - . , :
"bash PIPESTATUS [0]"

(mysqldump, gzip). , :
Bash - pipe

:

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

, mysqldump , ( [0]) PIPESTATUS.

+3
1

proc_open - ive

PHP StdErr Exec()

stderr , stdout stderr stdout

PIPESTAUS

system ( "bash -c 'your_command; exit\${PIPESTATUS [0]}'", $return);

, - -. bash.

bash -c , bash, PIPESTATUS .

+1

All Articles