Ошибка доступа запрещена при выборе в выходной файл с использованием Zend - PullRequest
0 голосов
/ 15 марта 2010

Я пытаюсь создать дамп таблицы MySQL на сервере, и я пытаюсь сделать это в Zend. У меня есть структура model / mapper / dbtable для всех моих соединений с моими таблицами, и я добавляю следующий код в мапперы:

public function dumpTable()
{
    $db = $this->getDbTable()->getAdapter();
    $name = $this->getDbTable()->info('name');
    $backupFile = APPLICATION_PATH . 
                  '/backup/' . date('U') .
                  '_' . $name . '.sql'; 
    $query = "SELECT * INTO OUTFILE '$backupFile' FROM $name";
    $db->query( $query );               
}

Это должно сработать, подумал я, но

Message: Mysqli prepare error: Access denied for user 'someUser'@'localhost' (using password: YES) 

- это то, к чему это приводит.

Я проверил права пользователя для someUser, и у него есть все права на базу данных и соответствующую таблицу. Я искал здесь и в сети в целом, и обычно включение «всех» прав для пользователя, кажется, решение, но не в моем случае (если я не пропускаю что-то прямо сейчас своими усталыми глазами + Я не хочу включать «все» на моем производственном сервере).

Что я здесь не так делаю? Или кто-нибудь знает более изящный способ сделать это в Zend?

Ответы [ 4 ]

2 голосов
/ 16 марта 2010

Несмотря на то, что я дал «все привилегии» соответствующему пользователю, я сделал это для каждой базы данных, а не глобально. Привилегия, необходимая для использования outfile, однако, FILE, может быть установлена ​​только как разрешение GLOBAL

2 голосов
/ 15 октября 2010

Если у вас есть проблема с разрешениями, вам нужно установить, под каким пользователем запускается mysql, чтобы иметь необходимые разрешения, необходимые для доступа к этой папке. Например, у вас есть /tmp/filedumps, с владельцем www-data и группой www-data, вам нужно добавить учетную запись mysql в группу в Debian / Ubuntu, которую вы можете сделать usermod -a -G www-data mysql.

Так я решил свои проблемы с * nix box.

1 голос
/ 08 июня 2012
>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

Снят из этого поста, который имеет обходной путь к разрешениям FILE, которые не предоставляются: Вывод запроса к файлу дает ошибку отказа в доступе

1 голос
/ 15 марта 2010

Работает ли обычный SELECT? Если это не так, я бы сказал, что это простой случай неправильного пароля. Если обычный SELECT работает, убедитесь, что вы предоставили право OUTFILE точному пользователю

 'someUser'@'localhost'

а не например

  'someUser'@'%'

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

...