mysql LOAD INFILE / OUTFILE

时间:2011-06-17 21:48:59

标签: mysql load-data-infile

我正在尝试使用mySQL SELECT INTO OUTFILE和LOAD DATA INFILE函数为Web应用程序创建一个简单的导入/导出功能。

将outfile / infiles的路径保留为默认的mysql路径(我认为通常会进入mysql.ini定义的tmp目录)似乎最简单。

为确保不与现有导出冲突,我生成一个时间戳的MD5作为我附加到OUTFILE的前缀:

$this->prefix = md5(time());

SELECT * INTO OUTFILE ' . $this->prefix . '-' . $table . '.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM " . $table . " WHERE 1

到目前为止,我的日志文件显示了/var/lib/mysql/master/

中创建的csv文件

但是当脚本尝试执行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 INFILESELECT 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 '"'

由于

2 个答案:

答案 0 :(得分:1)

您是否尝试过LOAD DATA LOCAL INFILE

答案 1 :(得分:0)

我认为julio,问题在于逻辑而不在SELECT INTO OUTFILELOAD DATA INFILE

在两个示例中,您要在OUTFILE / INFILE语句中添加$ this->前缀,每次都重新生成md5()。因此,您在OUTFILE中使用的前缀与INFILE的前缀不匹配,因此与错误匹配。

可能的解决方案: - 将前缀存储在表中,以后可以在执行LOAD DATA INFILE时读取该表 - 如果您定期生成报告,比如每小时,而不是md5(),请使用日期时间作为前缀,例如20110618_1000-table.csv。