mysql load data infile:Error 13 Can't get stat of 错误

今天在用load data infile导入一个CSV文件到mysql中时,出现如下错误:Can’t get stat of ‘/home/user/test.csv’

上网查了一下文档,大致最简单的解决办法就是将 load data infile 命令换成 load data local infile

有没有local的区别主要在以下几点:

  1. 添加local:待导入的文件由mysql客户端读取,并发送到mysql服务端的“临时”目录生成一份副本 。这个“临时”目录并不是mysql配置的tmpdir或者slave_load_tmpdir,而是系统的临时目录,而且不能由mysql配置。(通常linux的临时目录为/tmp,而widows的临时目录为C:\WINDOWS\TEMP)。当临时目录空间不足时,会触发load data local错误。

    • 文件路径为绝对路径时,将按照绝对路径去读取。
    • 文件路径为相对路径时,则相对的是mysql客户端启动时的位置
  2. 未添加local。待导入的文件必须存在于mysql服务端主机上,并由mysql服务器读取。

    • 文件路径为绝对路径时,mysql服务器直接读取
    • 文件路径为有一个或者多个前缀的相对路径时,mysql服务器将在 mysql的data目录下查找相对路径。
    • 文件路径为没有前缀的相对路径。mysql服务器将在默认的database目录下查找。
      而出现前面所述错误,一般主要还是因为权限的问题。加上local,实际上是由当前用户去访问待导入的文件,然后发送到服务器。而不加local,则是mysql服务端直接去读取(即便是在同一台服务器上,你当前登录的用户或者说文件所属用户,与启动mysql服务的用户也极大可能不是同一个用户,所以会出现访问权限的问题。)其实理解上面两点区别后,再结合用户的权限,就能很好的解决这个问题了。