Mysqldump generate empty file in php - php

I try to save my database in PHP but not work its work only with Shell
With shell (work good)
mysqldump --user=root --password= --host=localhost site > C:\xamppp\htdocs\site\sql\tests.sql
With php (file is created but empty)
system('mysqldump --user=root --password= --host=localhost site > C:\xamppp\htdocs\site\sql\test.sql', $result);
for $result i have 1
I work with XAMP on Windows 7, i test exec and system but its same
Thanks you

$return_var = NULL;
$output = NULL;
$command = "mysqldump -u mysql-user -h your_host -pmysql-pass database_name > /directory_path/file.sql";
exec($command, $output, $return_var);
or you can refer to this answer mysqldump via PHP

Use 2>&1
<?php system("mysqldump --user=root --password= --host=localhost site > C:\xamppp\htdocs\site\sql\test.sql 2>&1", $result); ?>

Related

exec("mysqldump") returning 2 but the command works in command-line

I'm trying to have MySQL backup through mysqldump and the command works in the command-line but it returns 2 from exec().
Here's the code I'm using:
$filename = "/path/to/backup/dbBackUp".date("Y-m-d").".sql";
$backupcmd = "/usr/bin/mysqldump -u USERNAME -pPASSWORD -A --single-transaction >".$filename;
exec($backupcmd, $output, $return);
Vardump of $output is array(0) { } and $return = 2.
As it turns out, www-data didn't have write access to folder I was storing the backups to. Thanks for your help.

Mysqldump does not work in php

I have run mysqldump on a test database using the bash command line and it works fine:
C:\\wamp\\bin\\mysql\\mysql5.6.12\\bin\\mysqldump --opt -u root -p membersite > c:\\wamp\\www\\php-backup\\membersitebackupfile1.sql
When I put the same line in a PHP file located in "c:\wamp\www\php-backup\dump.php" it produces a file with 0 bytes.
<?php
$command = "C:\\wamp\\bin\\mysql\\mysql5.6.12\\bin\\mysqldump --opt -u root -p membersite > c:\\wamp\\www\\php-backup\\membersitebackupfile1.sql";
exec($command);
?>
If you are using wamp then try:
$cmd = 'c: & cd "C:/wamp/bin/mysql/mysql5.6.17/bin" & mysqldump.exe --user=root --password=root --host=localhost databasename> "C:\Directory\SQL.sql"';
exec($cmd);

Not getting error code when fails copying remote MySQL DB using PHP -> SSH -> MYSQLDUMP

I created a script to copy a remote database using mysqldump inside a SSH connection. Then i ported to my PHP script so i can better manage several servers.
My problem is when the copy fails... I get no error code from the command.
This is the command:
ssh -p22 -i mykey.key -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null backup#hostname "mysqldump -hlocalhost -udbuser --databases db" > myfile.sql
It works =)
PHP code with simplified systax:
$comando = 'ssh -i mykey.key backup#hostname "mysqldump --databases db" > myfile.sql';
$ret_text = exec($comando, $output, $ret);
// Doesnt matter if command fails or sucess, result is?
//$ret = empty
//$output = empty
//$ret_text = empty
I need to know when the copy failed, does anyone know how to get a remote error code?
Thanks
neubert Solution Works! Thanks...
I ended with:
$comando = 'ssh -i mykey.key backup#hostname "mysqldump --databases db 2>&1\" 2>&1 > myfile.sql';

mysqldump not working through php

I am trying to take mysqldump of database through php, i am able to take database dump through command line this way only.
d:
cd "d:\wamp\bin\mysql\mysql5.5.24\bin"
mysqldump.exe
mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"
when trying to execute this command from php this way, i get a empty dump file.
$cmd = 'd: cd "d:/wamp/bin/mysql/mysql5.5.24/bin"mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);
or this way
$cmd = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump.exe>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);
or this way
$cmd = 'd:/wamp/bin/mysql/mysql5.5.24/bin>mysqldump --user=user --password=password --host=localhost db_name > D:\dump\test.sql';
exec($cmd);
I get only empty dump file.
i have gone through a lot of questions here like this, and this and lot more, but none of that solution is working for me.
Please see and suggest any possible way to do it.
Thanks.
You seems to use Windows, the way to create multi-command lines is to use the '&' operator (more info)
Example :
$cmd = 'd: & cd "d:/wamp/bin/mysql/mysql5.5.24/bin" & mysqldump.exe --user=user --password=password --host=localhost db_name > "D:\dump\test.sql"';
exec($cmd);
Also, double-check your paths because you are using d:/wamp/... and later D:\dump\test.sql, it seems that your command use slash and antislash and only \ should work.
At last, you can debug your command using a second argument to exec :
$output = array();
exec($cmd, $output);
var_dump($output);

Empty files generated from running `mysqldump` using PHP

I keep getting empty files generated from running
$command = 'mysqldump --opt -h localhost -u username -p \'password\' dbname > \'backup 2009-04-15 09-57-13.sql\'';
command($command);
Anyone know what might be causing this? My password has strange characters in it, but works fine with connecting to the db.
I've ran exec($command, $return) and outputted the $return array and it is finding the command. I've also ran it with mysqldump > file.sql and the file contains
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
So it would seem like the command is working.
Remove the space between -p and the password. If it didn't work, try to remove the quotes from the password
from MySQL documentation:
If you use the short option form (-p), you cannot have a space between the option and the password.
however, it is fine to have space with -h and -u options
I believe there are no spaces between -u and the actual username.
host: localhost user: peter password: pwd
would become:
-hlocalhost -upeter -ppwd
This is how I have done it - output is with maximum gzip compression:
<?php exec("/usr/bin/mysqldump --opt --host=MYSQLHOSTNAME --user=MYSQLUSER --password=PASSWORD DATABASENAME | gzip -v -9 >DATABASENAME.". date("Y-m-d_H-i-s") . ".sql.gz");?>
To put it in plain english, make sure to use the following options (all of them).
--user=USERNAME
--host=localhost
--password=****
The next non-option phrase should be your database name. If the command is followed by another non-option phrase, it will be treated as table names.
$command="mysqldump --xml --host=localhost --user=USERNAME --password=***** DBNAME > XMLTABLE.xml";
system($command);
$command = 'C:\xampp\mysql\bin\mysqldump --opt --user=root --host=localhost --password="password" my_db'.' > '.$backupdate.$sql_file_name; exec($command);
I faced the same issue and got it fixed by quoting the password. For example --password="yourpassword".
I had empty files too using mysqldump.
I run WampServer PHP7 under Windows 10.
system('mysqldump .... ') ;
Doen't work.
I had to add the full path (or add an Environment variable) :
system('C:\wamp64\bin\mysql\mysql5.7.9\bin\mysqldump.exe ...') ;
You have to specify full path to mysqldump:
// Linux:
$command = '/usr/bin/mysqldump --opt -h localhost -u username -p \'password\' dbname > \'backup 2009-04-15 09-57-13.sql\'';
// Windows:
$command = 'c:\mysql\bin\mysqldump --opt -h localhost -u username -p \'password\' dbname > \'backup 2009-04-15 09-57-13.sql\'';

Categories