load data local infile 报错“local file capability disabled”是因为mysql默认禁用本地文件导入,需同时开启客户端--local-infile参数和服务端local_infile=on变量,缺一不可。

为什么 LOAD DATA LOCAL INFILE 报错“Local file capability disabled”?
因为 MySQL 默认禁用本地文件导入,这是安全策略,不是配置遗漏。必须同时满足客户端和服务端两处开启,缺一不可。
客户端连接时必须加 --local-infile 参数
只在 SQL 里执行 SET GLOBAL local_infile = 1 不够——客户端没声明要传本地文件,服务端根本不会接收。
- 正确启动方式:
mysql --local-infile -u root -p - 如果漏掉这个参数,后续所有
LOAD DATA LOCAL INFILE都会直接报错,且错误信息不提示缺参数,容易误判 - Windows 下路径含空格或中文时,要用双引号包裹,例如:
LOAD DATA LOCAL INFILE "C:/data/user.csv"
服务端需显式启用 local_infile 系统变量
即使客户端带了参数,服务端仍可能拒绝——MySQL 8.0+ 默认 local_infile 是 OFF,且部分云数据库(如阿里云 RDS)根本不允许修改该变量。
- 登录后执行:
SET GLOBAL local_infile = 1; - 注意:需要
SYSTEM_VARIABLES_ADMIN权限,普通用户无法执行 - 该设置重启后失效;如需持久化,得在
my.cnf中添加local_infile=ON并重启服务 - 某些托管环境禁止此配置,此时只能改用
LOAD DATA INFILE(要求文件在服务端磁盘上)
LOAD DATA LOCAL INFILE 和 LOAD DATA INFILE 的关键区别
名字像,行为完全不同:前者读你本机的文件,后者读 MySQL 服务所在机器上的文件。路径、权限、调试方式全都不一样。
-
LOCAL:文件路径是客户端本地路径,依赖客户端参数 + 服务端开关 - 无
LOCAL:文件必须放在 MySQL 服务端的secure_file_priv目录下,且 MySQL 进程要有读取权限 - 查当前限制:
SHOW VARIABLES LIKE 'secure_file_priv';,返回 NULL 表示完全禁用INFILE - 导出脚本时若混用两者,很容易在不同环境失败——写脚本前先确认部署模式
--local-infile。它不像密码那样会提示输入,而是静默失败,得靠报错信息反推。











