MySQL LOAD INFILE配置遇权限及文件找不到问题求助
解决MySQL LOAD DATA INFILE权限及路径问题
一、解决LOAD DATA INFILE的权限拒绝(Error 29)问题
确认
secure_file_priv配置生效- 先定位MySQL实际加载的配置文件:
mysql --help | grep "Default options" - 在正确的配置文件(Ubuntu下通常是
/etc/mysql/mysql.conf.d/mysqld.cnf)的[mysqld]段添加:secure_file_priv = "/loadinfile/" - 重启MySQL服务并验证配置:
登录MySQL后执行:sudo systemctl restart mysql
确保输出值为SHOW VARIABLES LIKE 'secure_file_priv';/loadinfile/。
- 先定位MySQL实际加载的配置文件:
修复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
- 编辑AppArmor配置文件:
规范文件权限设置
无需设置危险的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读取的是客户端机器上的文件,而非服务器端文件:
服务器本地执行MySQL客户端
- 登录客户端时需显式启用local-infile:
mysql --local-infile=1 -u your_username -p - 使用Linux风格绝对路径执行命令:
LOAD DATA LOCAL INFILE '/loadinfile/file.csv' INTO TABLE your_table;
- 登录客户端时需显式启用local-infile:
远程客户端(如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
相关产品推荐
相关产品推荐

