Reputation: 490617
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.
Upvotes: 14
Views: 20008
Reputation: 129
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\'';
Upvotes: 0
Reputation: 450
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 ...') ;
Upvotes: 0
Reputation: 1
$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".
Upvotes: 0
Reputation: 21
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");?>
Upvotes: 2
Reputation: 3037
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);
Upvotes: 1
Reputation: 20765
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
Upvotes: 16
Reputation: 20792
I believe there are no spaces between -u and the actual username.
host: localhost user: peter password: pwd
would become:
-hlocalhost -upeter -ppwd
Upvotes: 5