使用Zend在select into outfile中访问被拒绝错误

时间:2010-03-15 17:30:49

标签: mysql sql zend-framework zend-db-table into-outfile

我正在尝试在服务器上转储MySQL表,我试图在Zend中执行此操作。我有一个模型/ 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的用户权限,并且他拥有相关数据库和表的所有权限。一般来说,我一直在这里和网上四处看看,通常打开“全部”用户的权利似乎是解决方案,但不是我的情况(除非我现在用疲惫的眼睛忽略了一些东西+我不想在我的生产服务器上打开“all”。

我在这里做错了什么?或者,是否有人知道在Zend中完成这项工作的更优雅方式?

4 个答案:

答案 0 :(得分:2)

虽然我向相关用户提供了“所有权限”,但我是基于每个数据库而不是全局执行此操作。然而,使用outfile所需的权限是FILE,只能设置为GLOBAL权限

答案 1 :(得分:2)

如果您遇到权限问题,则需要设置用户运行mysql以获得访问该文件夹所需的必要权限。例如,您拥有/tmp/filedumps,拥有者为www-data且组为www-data,您需要将mysql用户帐户添加到debian / ubuntu上的群组{{1} }。

这就是我在* nix框中解决问题的方法。

答案 2 :(得分:1)

普通的SELECT有效吗?如果它不是,我会说这是一个错误密码的简单情况。如果普通的SELECT有效,请确保将OUTFILE权限授予确切的用户

 'someUser'@'localhost'

而不是例如

  'someUser'@'%'

如果我没记错的话,这两个帐户将被区别对待并具有单独的权限设置。

答案 3 :(得分:1)

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

从这篇帖子中获取了解决方法,其中包含未授予FILE权限的变通方法: Query output to a file gives access denied error