2016-09-19 2 views
3

Я пытаюсь создать периодическую резервную копию (бедный мужской cron) моей базы данных с помощью mysqldump с функцией exec(). Я использую XAMPP/PHP7 на macOS.Невозможно выполнить mysqldump из PHP-скрипта

$command = "$mysqldump_location -u$db_user -h$db_host -p$db_password $db_name > $backup_file_location"; 
exec($command); 

Когда я бег PHP скрипта, я не получаю SQL дампа в пути, указанном в $backup_file_location, но если я выполняю те же $command строку на терминале непосредственно я получаю нужный файл SQL в нужном месте.

Я не могу понять, что может быть проблемой здесь. Также открыты предложения по лучшим способам сброса всей БД.

Edit 1:

Значение $mysqldump_location является /Applications/XAMPP/xamppfiles/bin/mysqldump

Значение $backup_file_location является /Applications/XAMPP/xamppfiles/htdocs/app5/data/sqldumps/sql_data.sql

/app5/ это папка, в то время как я разрабатываю мое приложение.

Редактировать 2: Возможное дублирующее предложение не применяется, поскольку проблема здесь не в том, как сбрасывать резервные копии SQL. Ключевая проблема заключалась в том, что резервное копирование с использованием mysqldump работало через терминал, но не через функцию exec() PHP.

+0

Покажите нам значения всех этих переменных или, по крайней мере, '$ backup_file_location' – RiggsFolly

+0

Мы понятия не имеем, какие значения имеют ваши переменные PHP, например' $ mysqldump_location' и '$ backup_file_location' и т. д. Я предлагаю вам записать финальную команду в' $ command' и посмотреть, что вы ожидаете. –

+0

все вышесказанное и убедитесь, что php имеет разрешение на запись в этот каталог – nogad

ответ

1

Решение проблемы, исходя из вышеприведенных комментариев, состояло в том, что запрос PHP выполняется в XAMPP как пользователь с ограниченными правами, а процесс mysqldump наследует эти привилегии.

Проверка состояния выхода процесса, выполняемого exec(), подтвердила, что mysqldump завершил работу с ненулевым статусом выхода, что по какой-то причине указывает на потерю.

Открывает права на запись 777 в каталог, в котором процесс mysqldump пытается записать разрешенную ошибку.

Она также должна быть достаточной, чтобы выяснить конкретные Uid & GID процессов Apache (проверьте User и Group значения конфигурации в файле конфигурации Apache (например XAMPP-дом /apache/conf/httpd.conf) и сделайте директорию вывода, которую можно записать с помощью этого uid или gid.

Смежные вопросы