#php #mysql #mysqldump
#php #mysql
Вопрос:
Я пытаюсь создать дамп базы данных с помощью команды mysqldump из простого php-скрипта, но выходной файл равен null, что-то не так в этом скрипте?
<?php
$dbhost = 'best.hostname.com';
$dbuser = 'best';
$dbpass = 'pass4best';
$dbname = 'best';
exec('mysqldump --host=$dbhost --user=$dbuser --pass=$dbpass $dbname > best.sql');
?>
Комментарии:
1. Кажется, что выходной файл содержит некоторые значения, но не то, что предназначено, он содержит: «Использование: mysqldump [ПАРАМЕТРЫ] базы данных [таблицы] ИЛИ mysqldump [ПАРАМЕТРЫ] —базы данных [ПАРАМЕТРЫ] DB1 [DB2 DB3 …] ИЛИ mysqldump [ПАРАМЕТРЫ] —все базы данных [ПАРАМЕТРЫ] Для получения дополнительных опций используйте mysqldump —help»
2. Вам нужны двойные кавычки вокруг вашей командной строки, иначе вы не получите никакой интерполяции переменных. Вы передаете команде буквальные имена переменных. Голосование за закрытие из-за типографской ошибки. Вы также можете рассмотреть возможность экранирования переменных аргументов, которые вы передаете в оболочку, в качестве хорошей практики.
Ответ №1:
Основываясь на вашем комментарии, команда должна быть
exec('mysqldump --host=$dbhost --user=$dbuser --pass=$dbpass --databases $dbname > best.sql');
Комментарии:
1. Любой из этих синтаксисов выдает одно и то же значение: exec(‘mysqldump —host=$dbhost —user=$dbuser —pass=$dbpass —databases=$dbname > bestlimo.sql’); exec(‘mysqldump —host=$dbhost —user=$dbuser —pass=$dbpass —all-databases=$dbname > bestlimo.sql’);
2. удалите
=
знак после баз данных3. на самом деле я не уверен, что у вас должны быть какие-либо
=
знаки в команде, только пробелы
Ответ №2:
Кажется, что exec() не работает, но shell_exec() сработал! Рабочий код является:
shell_exec( "mysqldump --allow-keywords --opt -h$dbhost -u$dbuser -p$dbpass $dbname | gzip> $backup_file");
Спасибо