2010-03-15 39 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