You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL LOAD INFILE配置遇权限及文件找不到问题求助

解决MySQL LOAD DATA INFILE权限及路径问题

一、解决LOAD DATA INFILE的权限拒绝(Error 29)问题

  1. 确认secure_file_priv配置生效

    • 先定位MySQL实际加载的配置文件:
      mysql --help | grep "Default options"
      
    • 在正确的配置文件(Ubuntu下通常是/etc/mysql/mysql.conf.d/mysqld.cnf)的[mysqld]段添加:
      secure_file_priv = "/loadinfile/"
      
    • 重启MySQL服务并验证配置:
      sudo systemctl restart mysql
      
      登录MySQL后执行:
      SHOW VARIABLES LIKE 'secure_file_priv';
      
      确保输出值为/loadinfile/。
  2. 修复AppArmor权限限制
    Ubuntu默认通过AppArmor管控MySQL的文件访问,即便文件权限设置正确,AppArmor仍可能拦截访问:

    • 编辑AppArmor配置文件:
      sudo nano /etc/apparmor.d/usr.sbin.mysqld
      
    • 在/var/lib/mysql/ r,类行下方添加:
      /loadinfile/** r,
      
    • 重启AppArmor和MySQL:
      sudo systemctl restart apparmor
      sudo systemctl restart mysql
      
  3. 规范文件权限设置
    无需设置危险的777权限,保持合理权限即可:

    sudo chown -R mysql:mysql /loadinfile/
    sudo chmod 755 /loadinfile/
    sudo chmod 644 /loadinfile/file.csv
    

二、解决LOAD DATA LOCAL INFILE的文件找不到(Error 2)问题

LOAD DATA LOCAL INFILE读取的是客户端机器上的文件,而非服务器端文件:

  1. 服务器本地执行MySQL客户端

    • 登录客户端时需显式启用local-infile:
      mysql --local-infile=1 -u your_username -p
      
    • 使用Linux风格绝对路径执行命令:
      LOAD DATA LOCAL INFILE '/loadinfile/file.csv' INTO TABLE your_table;
      
  2. 远程客户端(如Windows)连接服务器

    • 将file.csv放到客户端本地,使用对应系统的路径格式,例如:
      LOAD DATA LOCAL INFILE 'C:\\loadinfile\\file.csv' INTO TABLE your_table;
      
    • 同时确保远程客户端开启local-infile支持(如MySQL Workbench需在连接属性中勾选"Enable local infile")。

内容的提问来源于stack exchange,提问作者pundip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:40:30