0

我正在尝试在服务器上转储 MySQL 表,并尝试在 Zend 中执行此操作。我的所有表连接都有一个模型/映射器/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

4 回答 4

2

如果您有权限问题,您需要设置用户 mysql 在其下运行以获得访问该文件夹所需的必要权限。例如/tmp/filedumps,您拥有 的所有者www-data和组www-data,您需要将 mysql 用户帐户添加到 debian/ubuntu 上的组中,您可以这样做usermod -a -G www-data mysql

这就是我在 *nix 盒子上解决问题的方法。

于 2010-10-14T20:05:05.923 回答
2

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

于 2010-03-16T10:06:31.387 回答
1
>$ echo "select count(predicate),subject from TableA group by subject"  | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt

从这篇文章中得到了一个解决方法,即未授予文件权限: 查询输出到文件给出访问被拒绝错误

于 2012-06-08T18:40:31.870 回答
1

正常的 SELECT 工作吗?如果不是,我会说这是一个简单的密码错误案例。如果正常的 SELECT 有效,请确保您将 OUTFILE 权限授予确切的用户

 'someUser'@'localhost'

而不是例如

  'someUser'@'%'

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

于 2010-03-15T17:34:42.183 回答