mysqldump генерирует пустой файл через систему PHP () - PullRequest
0 голосов
/ 09 мая 2011

Прежде чем вы скажете, что есть другие подобные вопросы, но ни один из ответов, которые я видел, не сработал, поэтому я задаю новый вопрос.

Я пытаюсь использовать mysqldump через system() с помощью этой команды:

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/';
$backup_name = $backup_path . $dbname . '.backup.' . date('l.dS.F.Y.g.iA') . '.sql';

$command = 'mysqldump ' . $dbname . ' -u ' . $dbuser . ' -p' . $dbpasswd . ' > ' . $backup_name;

system($command, $returned);

print_r($returned); 

$returned выводит 127, и в папке резервной копии находится пустой файл с размером, равным нулю, теперь, когда я эхо $command и затем введите егов терминал, он отлично работает и создает полную резервную копию базы данных.Это часть, которую я не понимаю, почему она не работает хорошо в вызове system(), но в терминале она работает просто отлично?

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Это связано с тем, что при запуске mysqldump вам необходимо вводить пароль, даже если вы указываете его с -p

Это должно быть полезно: http://www.techiecorner.com/1619/how-to-setup-mysqldump-without-password-in-cronjob/

0 голосов
/ 15 октября 2013

Я должен не согласиться с ответом Андрея выше.

В ряде компаний с общим хостингом работает:

$command = 'mysqldump --opt --host='.$host.' --user='.$mysql_username.' --password=\''.$mysql_password.'\' '.$dbname.' > \''.$filename.'\'';
exec($command);

Осторожно, если в ваших аргументах (именах файлов, паролях и т. Д.) Есть пробелы, которые вы используете в кавычках. В PHP вам может понадобиться использовать обратную косую черту, как я делал выше, при цитировании. Предшествующий или конечный пробел обычно плохая идея, но я столкнулся с клиентом, где это оказалось причиной пустого 0-байтового файла mysqldump. Цитирование решило проблему. Вам также может потребоваться оболочка экранировать аргументы.

Следующие две строки совершенно разные:

-password='password  ' db_name > 'my file.sql'
-password=password   db_name > my file.sql

Обратите внимание, что у второго также есть два пробела в конце пароля, но даже HTML может его игнорировать.

Я, наверное, должен упомянуть о нубах ... убедитесь, что вы можете вручную подключиться к настройкам, прежде чем искать причины, по которым он не работает, например, - убедитесь, что хост правильный, например, localhost или yourdb.website.com - убедитесь, что имя пользователя и пароль работают

0 голосов
/ 09 мая 2011

Ваша проблема может заключаться в том, что у вас нет разрешения на запись в каталог резервных копий.

Если вы запустите код:

$backup_path = $_SERVER['DOCUMENT_ROOT'] . '/website/acp/backup/';
file_put_contents("{$backup_path}test-file.txt", "test data");

Появляется ли файл в каталоге резервных копий?

Если нет, вам нужно изменить разрешения каталога, чтобы пользователь веб-сервера мог писать в него. chmod 777 - простое решение, но права доступа останутся широко открытыми.

...