如何从远程文件加载FILE

时间:2012-05-15 10:27:40

标签: mysql import

如何从远程服务器加载具有“MySQL LOAD FILE”功能的文件?

1 个答案:

答案 0 :(得分:1)

正如LOAD DATA手册中所述,您可以使用LOCAL关键字:

  

LOCAL关键字(如果已指定)将根据连接的客户端进行解释:

     
      
  • 如果指定了LOCAL,则客户端主机上的客户端程序将读取该文件并将其发送到服务器。该文件可以作为完整路径名提供,以指定其确切位置。如果以相对路径名的形式给出,则相对于启动客户端程序的目录解释名称。

         

    LOCALLOAD DATA一起使用时,会在服务器的临时目录中创建该文件的副本。这不是由tmpdirslave_load_tmpdir的值确定的目录,而是操作系统的临时目录,并且不能在MySQL服务器中配置。 (通常,系统临时目录在Linux系统上为/tmp,在Windows上为C:\WINDOWS\TEMP。)此目录中的副本缺少足够的空间可能导致LOAD DATA LOCAL语句失败。

  •   
  • 如果未指定LOCAL,则该文件必须位于服务器主机上,并由服务器直接读取。服务器使用以下规则来查找文件:

         
        
    • 如果文件名是绝对路径名,则服务器将其用作给定的。

    •   
    • 如果文件名是具有一个或多个主要组件的相对路径名,则服务器将搜索相对于服务器数据目录的文件。

    •   
    • 如果给出没有前导组件的文件名,服务器将在默认数据库的数据库目录中查找该文件。

    •   
  •   
     

请注意,在非LOCAL的情况下,这些规则意味着从服务器的数据目录中读取名为./myfile.txt的文件,而读取名为myfile.txt的文件从默认数据库的数据库目录。例如,如果db1是缺省数据库,则以下LOAD DATA语句从data.txt的数据库目录中读取文件db1,即使该语句明确将文件加载到db2数据库中的表:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
     

使用正斜杠而不是反斜杠指定Windows路径名。如果你使用反斜杠,你必须加倍。

     

出于安全考虑,在读取位于服务器上的文本文件时,这些文件必须驻留在数据库目录中,或者所有文件都可以读取。此外,要在服务器文件上使用LOAD DATA INFILE,您必须具有FILE权限。见Section 6.2.1, “Privileges Provided by MySQL”。对于非LOCAL加载操作,如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

     

使用LOCAL比让服务器直接访问文件要慢一些,因为文件的内容必须由客户端通过连接发送到服务器。另一方面,您不需要FILE权限来加载本地文件。

     

使用LOCAL时,默认的重复键处理行为与指定IGNORE的行为相同;这是因为服务器无法在操作过程中停止传输文件。 IGNORE将在本节后面进一步解释。

     仅当您的服务器和客户端都已配置为允许时,

LOCAL才有效。例如,如果使用mysqld启动--local-infile=0,则LOCAL不起作用。请参阅Section 6.1.6, “Security Issues with LOAD DATA LOCAL