我正在嘗試使用mySQL SELECT INTO OUTFILE和LOAD DATA INFILE函數爲web應用程序創建一個簡單的導入/導出功能。mysql LOAD INFILE/OUTFILE
將outfile/infiles的路徑作爲默認的mysql路徑(我認爲通常進入mysql.ini定義的tmp目錄)似乎是最簡單的。
爲確保與現有的出口沒有衝突,我產生一個時間戳作爲前綴,我追加到OUTFILE的MD5:
$this->prefix = md5(time());
SELECT * INTO OUTFILE ' . $this->prefix . '-' . $table . '.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM " . $table . " WHERE 1
到目前爲止好,我的日誌文件會顯示在創建的CSV文件/var/lib/mysql/master/
當腳本試圖做LOAD DATA INFILE
然而,該文件未找到:
2011-06-17 14:31:35 - INFO --> Created outfile: eae77f210684ba0616c773677f707513-table.csv
2011-06-17 14:31:35 - ERROR --> mySQL Error: 2 - File 'eae77f210684ba0616c773677f707513-table.csv' not found (Errcode: 2)
是否有可能日在LOAD INFILE
和SELECT INTO OUTFILE
正在使用不同的默認位置?
編輯添加:我繼續並在LOAD INFILE命令中指定了mysql tmp目錄 - 由於某些原因,它找不到該文件,即使它明顯存在,我會假設同一個「用戶「正在讀取和寫入到它:
$ sudo find/-name '8e357dcba6557a31f9a36230c4233d1b-table.csv'
/var/lib/mysql/master/8e357dcba6557a31f9a36230c4233d1b-table.csv
2011-06-17 15:04:25 - INFO --> Created outfile: 8e357dcba6557a31f9a36230c4233d1b-table.csv
2011-06-17 15:04:25 - ERROR --> mySQL Error: 13 - File '/var/lib/mysql/master/8e357dcba6557a31f9a36230c4233d1b-table.csv' not found (Errcode: 13)
編輯:添加INFILE語句
$this->prefix = md5(time());
$this->mysql_dir = "/var/lib/mysql/master/";
LOAD DATA LOCAL INFILE ' . $this->mysql_dir . $this->prefix . '-' . $table . '.csv
INTO TABLE $table
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
感謝
當你嘗試'LOAD INFILE'時,爲什麼你的錯誤(代碼)列表顯示'INFO - >創建outfile:'(注意**創建**之後的** outfile **)?而且,既然你展示了你用來創建OUTFILE的SQL,爲什麼你還沒有顯示LOAD命令? –
這些日誌條目只是我自己的日誌記錄 - 這不是一個「官方」的mysql日誌文件。當實際的OUTFILE語句返回成功代碼時,它會被寫入。我會發布load infile語句。 – julio
編輯完成後,問題似乎很清楚。您正在使用'$ this-> prefix = md5(time());'創建'OUTFILE'作爲文件名的一部分。你的'LOAD INFILE'也使用'$ this-> prefix = md5(time());'作爲文件名的一部分;如果時間完全改變,則MD5值將不匹配,因此'OUTFILE'和'INFILE'名稱也不會匹配。 –