php exec() - mysqldump создает пустой файл

Я хочу создать резервную копию из базы данных, но я получаю только пустой файл.

include('config.php');

$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql";
exec($command);

echo "<br />".$command;

test.sql создается там, где находится файл.php.

Редактировать:

Заметка! Я использую XAMPP WINDOWS!

Решение:

Поскольку я использую веб-сервер Windows (XAMPP), мне нужно было указать путь:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql';
  1. Я убрал пробел между -p и проходом. Это выглядит как: -pMYPASSWORD
  2. Заменены " с '

Я думаю, что если вы используете веб-сервер на базе Linux, вам не нужно указывать путь для mysqldump.

Ура!:-)

8 ответов

Попробуй это:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1';

- о выдаче разрешения.

Это параметры

-uROOT -pPASSWORD - БД БД --result-file=FILE.SQL

Если вы посмотрите руководство для exec, то выходные данные перейдут в массив, который является вторым аргументом. Это может быть источником проблемы.

Вы должны удалить пробел между -p и паролем.

--opt не требуется с последними версиями mysql.

Кроме этого, ваш синтаксис правильный, поэтому если он не работает с исправлением -p, вам следует проверить параметры и произведенную команду.

Для тех, кто на Mac

Я боролся с этим вопросом весь вечер сегодня. Глупая ошибка: нужно chmod каталог, в который вы выгружаете файл.

Я запустил это, которое решило проблему:

chmod -R 777 your_dump_directory/

Выньте переменные из кавычек и удалите --opt.

Также убедитесь, что у вас есть уникальные имена файлов

$backupfile = $dbname . date("Y-m-d-H-i-s") . '.sql';

$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";

system($command);

Попробуй это:

$DBUSER="user";
$DBPASSWD="password";
$DATABASE="DBname";

$filename = "backup-" . date("d-m-Y") . ".sql";

$command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename";
passthru($command);
  • Измените маршрут в направлении приложения mysqldump.exe вашего компьютера.
  • Соблюдайте " " внутри команды.

Затем принудительно загрузите файл:

if (file_exists("your_web_site/".$filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile("your_web_site/".$filename);
exit;
}

Изменить: Вы должны дать разрешения для папки, в которой вы храните копии.

Обязательно установите PATH для папки bin MySQL для WAMP.

Другие вопросы по тегам