Mysql – thesqldump (using PHP exec) not dumping file but no error

execMySQLPHP

I wasn't sure if this was a SO or SF question but I thought this might be the best place. I apologise if it is not!

I am using mysqldump through PHP exec but it doesn't seem to be working. The code I am using is

<?php
exec('mysqldump -u DB_USER -pDB_PASS DB_NAME > /tmp/test.sql');
?>

When I run this script I recieve no errors on error_log, but I do not get a dump in /tmp. I am not sure what is causing this. I am not sure if it is trying to dump to /tmp relative to where the PHP file is being executed, which is the result I am looking for, or is dumping to a /tmp elsewhere? Or am I making another mistake completely?

Best Answer

The solution I found is to run the command in a sub-shell and then output the stderr to stdout. This way, the $output is well populated.

i.e. :

exec("(mysqldump -u$username -p$password $database $tables > $dump_name) 2>&1", $output, $result);

var_dump($result);
echo "<br />";
var_dump($output);
echo "<br />";

The output :

int(6)

array(1) { [0]=> string(46) "mysqldump: Couldn't find table: "table_name"" }

Hope it helps !