2012-09-14 54 views
6

我使用加載數據插入查詢時出現錯誤。MySQL:加載數據infl

"load data infile '/home/bharathi/out.txt' into table Summary" 

此文件位於該位置。但是mysql會拋出下面的錯誤。 ERROR 29(HY000):文件 '/home/bharathi/out.txt' 未找到(ERRCODE:13)

show variables like 'data%'; 
+---------------+-----------------+ 
| Variable_name | Value   | 
+---------------+-----------------+ 
| datadir  | /var/lib/mysql/ | 
+---------------+-----------------+ 

數據風向指向根權限的文件夾中。我不能改變這個變量,因爲它是隻讀的。

我該怎麼做load data infile操作?

我試着改變文件權限,加載數據本地infile。它不會工作。

+0

在哪個系統(服務器或客戶端)是文件? – eggyal

+0

服務器和客戶端或同一臺機器。 – kannanrbk

回答

11

由於LOAD DATA INFILE Syntax下記載:

出於安全原因,當讀取位於服務器上的文本文件時,該文件必須駐留在數據庫目錄或者是所有可讀。此外,要在服務器文件上使用LOAD DATA INFILE,您必須具有FILE權限。見Section 6.2.1, 「Privileges Provided by MySQL」。對於非LOCAL加載操作,如果secure_file_priv系統變量設置爲非空目錄名稱,則要加載的文件必須位於該目錄中。

因此,應該可以:

  • 確保你的MySQL用戶具有FILE特權,並假設secure_file_priv系統變量未設置:

    • 使文件可讀所有;或

    • 將文件移動到數據庫目錄中。

  • 否則,使用LOCAL關鍵字有文件由您的客戶端讀取並傳輸到服務器。但是,請注意:

    LOCAL僅適用於您的服務器和客戶端都已配置爲允許它的情況。例如,如果mysqld--local-infile=0開頭,則LOCAL不起作用。請參閱Section 6.1.6, 「Security Issues with LOAD DATA LOCAL

+0

以秒爲單位打我...... +1 – fancyPants

8

這確實爲我工作的解決方案是:

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv 

增加以備將來參考。