将文件导入Mysql数据库

Mysql提供了一个 load data infile xxx into table table_name 的方法来帮助批量的导入数据。这个操作是 select * out to file 操作的逆操作。

大体的使用方式是:

1
2
3
shell>mysql -hxx -uxx -pxx database
mysql>set names utf8;
mysql>load data infile '/path_to_file/xx.csv' into table xx ;

但是在遇到文件不在mysql目录中时,会发生 参考资料1 中的错误,修正的办法是使用 local 参数。具体问题是:

出于安全原因,当读取位于服务器中的文本文件时,文件必须位于数据库目录中,或者是全体可读的。另外,要对服务器文件使用LOAD DATA INFILE,您必须拥有FILE权限。

如果指定了LOCAL,则文件会被客户主机上的客户端读取,并被发送到服务器。文件会被给予一个完整的路径名称,以指定确切的位置。

例如:

1
load data local infile '/Users/shiqiang/Desktop/school.csv' into table i_school FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r';

参考资料:

  1. Mysql Error 13
  2. Mysql手册 Load Data Infile

cocowool

A FULL STACK DREAMER!