2010-03-15 40 views
0

我试图在服务器上做一个MySQL表的转储,我正在尝试在Zend中执行此操作。我有一个模型/映射器/ DBTABLE我要我的表的所有连接结构,我添加以下代码映射器:使用Zend进入outfile时访问被拒绝错误

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

尽管我向所讨论的用户提供了“所有权限”,但我是以每个数据库为基础而不是全局性的。然而,需要使用outfile的特权是FILE,只能设置为GLOBAL权限

1

是否正常工作的选择?如果它不是,我会说这是一个简单的密码错误的情况。如果一个正常的选择作品时,请确保您授予OUTFILE权的确切用户

'someUser'@'localhost' 

,而不是例如

'someUser'@'%' 
如果我没有记错

,这两个帐户将被区别对待,有独立权限设置。

+0

嘿佩卡, 是,SELECT,INSERT,UPDATE等工作得很好,并根据phpMyAdmin的,SomeUser的有“所有特权” – Peter 2010-03-15 17:39:23

+1

@彼得奇怪。做了FLUSH PRIVILEGES和/或重新启动了服务器? – 2010-03-15 17:41:30

+1

@Peter可以尝试与所有权限创建第二用户,并与一个尝试,只是为了排除重复记录等? – 2010-03-15 17:41:57

2

如果您有权限问题,您需要设置用户mysql在其下运行,以具有访问该文件夹所需的必要权限。例如,您有/tmp/filedumps,拥有www-datawww-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 

在这个职位上有一个变通方法FILE权限Snarfed没有被授予: Query output to a file gives access denied error