mysqldump не работает правильно - PullRequest
2 голосов
/ 17 мая 2010

Я пишу некоторый код на PHP для резервного копирования базы данных.

Вот мой код:

exec("mysqldump --opt -h localhost -u root test > mydb.sql");

Но я получаю 0 байт в моем файле (mydb.sql). Я также использую passthru (), system (), но он по-прежнему получает 0 байт.

Я пытаюсь использовать команду. Это работает.

Я использую последний XAMPP для своего локального хоста.

Так, как я могу сделать, чтобы это работало правильно?

Ответы [ 5 ]

9 голосов
/ 17 мая 2010

Вероятно, проблема связана с разрешениями или с тем, что вы не передаете пароль. Чтобы увидеть ошибки, направьте STDERR в STDOUT, используя 2>&1

exec("mysqldump --opt -h localhost -u root test > mydb.sql 2>&1", $output);
print_r($output);

Это покажет вам ошибки, которые вы обычно видите в командной строке.

2 голосов
/ 17 мая 2010

Скорее всего, mysqldump не находится в пути PHP / Apache. Это приведет к тому, что оболочка выдаст ошибку «команда не найдена» на STDERR, и не выведет на STDOUT (который перенаправляется в файл и заканчивается длиной 0).

Попробуйте добавить полный путь к mysqldump (c:\mysql\bin\mysqldump или что-то еще) и повторите попытку.

1 голос
/ 19 июля 2012

вы должны передать пароль без пробела после опции -p, и то же самое для имени пользователя идет сразу после -u

exec ("mysqldump --opt -h localhost -uUSER -pPASSWORD DBNAME> mydb.sql");

У меня проблема с общим хостом, оказалось, что я должен использовать имя пользователя и пароль хоста, а не имя пользователя и пароль базы данных

0 голосов
/ 17 июня 2014
Команды

, такие как exec () и system (), не работают на всех серверах, только на локальных серверах и выделенных серверах. Если вы размещаете сервер, вам нужно будет проверить, разрешает ли ваш хостинг-план доступ к exec (команда) и системе () если вы не позволите нанять другой план.

0 голосов
/ 17 июня 2014

попробуйте это!

$username = "root";
$password = "";
$hostname = "localhost";
$dbname   = "test";

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .date("Y-m-d_H-i-s").".sql"));

$command = "C:\AppServ\MySQL\bin\mysqldump --add-drop-table --host=$hostname --   user=$username --password=$password ".$dbname;

system($command);
...