2010-03-15 4 views
0

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

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?

ответ

2

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

1

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

'someUser'@'localhost' 

и, например, не

'someUser'@'%' 

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

+0

Эй Пекка, да, SELECT, INSERT, UPDATE и т.д. работает просто отлично, и, по словам PHPMyAdmin, someUser имеет "ВСЕ ПРИВИЛЕГИИ" – Peter

+1

@Peter странно. Сделано 'FLUSH PRIVILEGES' и/или перезапустили сервер? –

+1

@Peter вы можете попробовать создать второго пользователя со всеми привилегиями и попробовать его с этим, просто чтобы исключить дубликаты записей и т. Д.? –

2

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

Вот как я решил свои проблемы на * nix-боксах.

1
>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt 

Snarfed с этого поста, который имеет обходной путь для прав доступа к файлам не предоставляется: Query output to a file gives access denied error