MySQL: mysqldump для создания резервной копии базы данных

#php #mysql #mysqldump

#php #mysql #mysqldump

Вопрос:

Я написал следующий фрагмент, который генерирует mysql дамп базы данных и сохраняет его на сервере:

 public function save_db_backup()
{
    $DBUSER=$this->db->username;
    $DBPASSWD=$this->db->password;
    $DATABASE=$this->db->database;

    $filename = $DATABASE . "-" . date("Y-m-d_H-i-s") . ".sql.gz";

    $save_path = $_SERVER['DOCUMENT_ROOT'] . '/application/assets/db_backups/' . $filename;

    $cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best > " . $save_path;

    exec( $cmd );
}
 

Он отлично работает на моем другом сервере. Но после переноса моего сайта на этот новый сервер он внезапно перестал работать, т.Е. Файл резервной копии базы данных не сохраняется по указанному пути. Кроме того, я проверил, exec включен ли он на сервере, плюс каталог доступен для чтения и записи:

  is_readable($_SERVER['DOCUMENT_ROOT'] . '/application/assets/db_backups/') // true
 is_writable($_SERVER['DOCUMENT_ROOT'] . '/application/assets/db_backups/') // true
 

Я проверил, и учетные данные базы данных в порядке. Я пробовал с путем к mysqldump , и это тоже не сработало:

 $cmd = "/usr/bin/mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best > " . $save_path;
 

Какая проблема может быть?

Комментарии:

1. выполняются ли эти скрипты из задания cron?

2. На всякий случай: никогда не размещайте резервные копии базы данных в месте, доступном из Интернета. Они будут проиндексированы Google.

3. @AbhikChakraborty Да, я бы использовал cron job позже, но сейчас я просто пытаюсь сделать это вручную, и он не создает резервную копию.

Ответ №1:

Вы должны проверить, какой пользователь запускает команду, а затем, доступен ли каталог для чтения и записи ЭТИМ пользователем. Если вы запускаете его из PHP-скрипта, это вероятная причина.