Empty files generated from running `mysqldump` using PHP - 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\'';

Related

How import large sql file (108MB) in server mysql using PHP?

I have a 108MB SQL file, how can i import this file in server using PHP Script?
I try to do this, but no result
mysql -h 213.xyz.200.xx -u myUsername -p MyPassword MyDatabase < temporarytable.sql
Take the space out after the -p or don't put the password in at all and it will prompt you for it.
mysql -h 213.xyz.200.xx -u myUsername -pMyPassword MyDatabase < temporarytable.sql

XAMPP (Windows) backup MySQL Database Automatically

I am trying to create a batch file in Windows to backup a MySQL Database, i have tried this:
C:\xampp\MySQL\bin\MySQLDump –u root –p database_name –result-file=”C:\Users\Administrator\Desktop\MySQLDump.sql”
but i get an error saying:
Got error: 1044: Access Denied for user ``#`localhost` to database `?u` when selecting the database
The solution to this problem/error was to use one of these mysqldump commands:
mysqldump --opt --lock-tables=false -u USER -p DBNAME > dump.sql
mysqldump --opt --single-transaction -u USER -p DBNAME > dump.sql
http://alvinalexander.com/mysql/mysql-error-1044-access-denied-for-user-using-lock-tables
Try this, it worked for me.
Don't forget to replace values inside {} as you need
C:\xampp\mysql\bin\mysqldump.exe -u{username} -p{passwrod} database > {/backuppath}.sql
Completed guide can be found at here:
https://www.tectut.com/2016/04/automatically-backup-mysql-databases-on-windows/

Mysqldump in amazon using PHP

I want to have a database backup our database is hosted in amazon rds. My problem in everytime i run my PHP script it generates an sql file but it is empty.
Here is my code:
exec("/usr/bin/mysqldump -u *username* -p *password* | gzip > /var/www/html/db-backup/testdb.sql.gz");
I think that you need to specify which database you want to backup
exec("/usr/bin/mysqldump -u *username* -p*password* *dbname* | gzip > /var/www/html/db-backup/testdb.sql.gz");
and you have to specify password next to -p parameter without space (mysqldump -u youruser -pyourpassword -h yourhostname yourdatabase)

Copy remote data into local database

Can anybody help me to copy all data from remote server mysql database to local database. I am using the following code.
$command="mysql -h {$mysql_host} -u '{$mysql_username}' -p '{$mysql_password}' '{$filename}' < '{$mysql_database}'";
$output = shell_exec($command);
Try with:
mysqldump -h remote_host -u remote_user -premote_password remote_database | mysql -u local_user -plocal_password local_database
It's dumping database from remote host, and then pipe'ing output to your mysql.
In your code it'll be:
$command="mysqldump -h {$mysql_host} -u '{$mysql_username}' -p'{$mysql_password}' '{$filename}' | mysql -u '{$local_user}' -p'{$local_password}' {$local_database}";
$output = shell_exec($command);
Try mysqldump -h "REMOTE_HOST" -u'REMOTE_USER' -p'REMOTE_PASSWORD' REMOTE_DB_NAME > /PATH_TO/back_ups/back_up.sql then just find this dump by the path in the catalog
$command="mysqldump -h {$mysql_host} -u '{$mysql_username}' -p '{$mysql_password}' {$mysql_database} > '{$filename}'";
{$mysql_database} without ''

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

Categories