【问题标题】:ERROR 2068 (HY000): LOAD DATA LOCAL INFILE file request rejected due to restrictions on accessERROR 2068 (HY000): LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝
【发布时间】:2020-12-01 08:13:34
【问题描述】:

评论我正在尝试,

mysql> 

LOAD DATA LOCAL INFILE '/var/tmp/countries.csv' 
INTO TABLE countries 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' LINES 
TERMINATED BY '\n' 
IGNORE 1 LINES 
(CountryId,CountryCode,CountryDescription,CountryRegion,LastUpdatedDate,created_by,created_on)
SET created_by = 'DH_INITIAL_LOAD', created_on = current_timestamp();

ERROR 2068 (HY000): LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝。`

它工作正常,我为 python 脚本下载了 pymysql 和 mysql 连接器。我卸载并检查了它仍然无法正常工作。 verion 和 infile 为 ON,

 select version() -| 8.0.17



mysql> SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)

【问题讨论】:

  • 请检查文件夹的权限,您也可以尝试将其更新到较新的版本
  • 删除 LOCAL 关键字 - 你的情况是错误的。然后检查:1)用于启动 MySQL 守护程序的 OS 帐户的访问权限(在文件系统中)2)local_infile 系统变量(完成 - ON 是正确的值)3)secure_file_priv 系统变量 4)MySQL 的文件权限用于执行查询的帐户。
  • 如果我删除 local 关键字,它会抛出一个错误,提示 ERROR 1045 (28000): Access denied for user 'admin'@'%' (using password: YES)
  • 显示像“secure_file_priv”这样的变量; - /tmp/ 尝试将文件放在 /tmp 下并检查仍然面临问题。

标签: mysql load


【解决方案1】:

使用 MySql Workbench 8 或更高版本引入了这个问题。这为我解决了问题:

这个限制可以从 MySQL Workbench 8.0 的 以下方式。编辑连接,在 Connection 选项卡上,转到 “高级”子选项卡,并在“其他:”框中添加行 'OPT_LOCAL_INFILE=1'。

这应该允许使用 Workbench 的客户端运行 LOAD DATA INFILE 像往常一样。

引用自此链接: https://bugs.mysql.com/bug.php?id=91872

【讨论】:

    【解决方案2】:

    已知问题:https://bugs.mysql.com/bug.php?id=91872

    尝试连接到 mysql 时的解决方法,将 local-infile 设置为 1 并执行加载命令: mysql --local-infile=1 -h$MASTER_DB_HOST -u$MASTER_DB_USER -p$MASTER_DB_PASSWD -D$MASTER_DB_NAME

    【讨论】:

      【解决方案3】:

      对于 ubuntu:

      1. 编辑文件 /etc/mysql/mysql.conf.d/mysqld.cnf 并在末尾添加以下行:

        #secure_file_priv=""

      2. 重启服务

         systemctl stop mysql 
         systemctl start mysql
        
      3. 运行:mysql -u root -p 并检查本地infile变量

          mysql> show global variables like 'local_infile';
        
          +---------------+-------+ 
          | Variable_name | Value |
          +---------------+-------+
          | local_infile  | OFF   |
          +---------------+-------+
          1 row in set (0.00 sec)
        
      4.   mysql> set global local_infile=true;
        
          +---------------+-------+ 
          | Variable_name | Value |
          +---------------+-------+
          | local_infile  | ON    |
          +---------------+-------+
          1 row in set (0.00 sec)
        
      5.   mysql> exit
          Bye
        
      1. 运行

         mysql --local-infile=1 -u root -p
        
      2.   LOAD DATA INFILE '/var/lib/mysql-files/filename' INTO TABLE tablename;
        

      【讨论】:

        【解决方案4】:

        修复这个错误(mysql 8):

        错误 2068 (HY000): LOAD DATA LOCAL INFILE 文件请求被拒绝 访问限制。

        将以下行添加到服务器配置文件的“客户端”部分下:

        [client]
        loose-local-infile=1
        

        这将修复错误。但是,这假设您已经在“mysqld”部分下设置了以下内容:

        [mysqld]
        local_infile=1
        

        在配置文件中设置这两个参数将允许从任何目录加载数据。

        这是一个简单的使用示例。在mysql终端运行:

        load data local infile '/path/to/file/data.tsv' into table my_table_name
         fields terminated by '\t'
         LINES TERMINATED BY  '\n'
        (
         `col1`,
         `col2`,
         `col3`,
         `col4`
        );
        

        【讨论】:

        • 这适用于我,使用 mysql 8。谢谢。
        【解决方案5】:

        对于 Mac 用户,如果上述解决方案不起作用(并且我正在使用 mac OS Big Sur)

        转到终端并输入

        $ vi ~/.my.cnf
        

        然后将其添加到文件中

        [mysqld]
        secure_file_priv = ''
        

        保存并退出窗口。现在转到终端并使用重新启动 mysql 服务器

        $mysql.server restart
        

        进入mysql服务器使用

        $ mysql -u <your username> -p
        

        现在在mysql中输入以下内容

        mysql> SHOW VARIABLES LIKE "secure_file_priv";
        

        这应该将变量的值显示为空白。 现在如果你使用查询

        load data local infile '<complete_file_path>' 
        into table <table_name>
        fields terminated by ',';
        

        这应该可以!还要确保您已使用以下变量将以下变量设置为“ON”:

        set global local_infile = 1;
        

        更新

        对于 windows 用户 - 安装 mysql 8.0 以下是上面提到的安全文件变量

        secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
        

        【讨论】:

          【解决方案6】:

          在窗户上:
          在客户端和服务器以及设置(在 my.ini 中)启用本地后对我来说

                  [client]
                    local_infile=1
                  [mysqld]
                    secure_file_priv=""
          
           the sql command ...
             load data local infile "FILE" 
           change to 
              load data infile "FILE"
          
          works every time ...
          so much so I do not even use the load local anymore and am not sure of the point of the command ...  
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-12-26
            • 2020-11-04
            • 1970-01-01
            • 1970-01-01
            • 2013-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多