C# 使用MySqlConnection执行LOAD LOCAL DATA INFILE报错解决方法
报错原因
触发该错误的核心是两个配置未同时开启:
- MySQL服务端默认禁用了
LOAD DATA LOCAL INFILE命令权限 - C#的MySQL连接默认未开启本地文件加载权限
解决步骤
1. 修改MySQL服务端配置
- 找到MySQL配置文件:Windows环境为
my.ini,Linux环境为/etc/my.cnf或/etc/mysql/my.cnf - 在配置文件的
[mysqld]节点下添加配置:local_infile=1 - 保存配置后重启MySQL服务
- 重启完成后执行SQL命令验证配置是否生效:
SHOW GLOBAL VARIABLES LIKE 'local_infile';,返回值为ON即为配置成功
2. 修改C# MySQL连接字符串
在现有的连接字符串中新增AllowLoadLocalInfile=true参数,示例连接字符串如下:
server=127.0.0.1;port=3306;user=root;password=你的数据库密码;database=你的业务库名;AllowLoadLocalInfile=true;
3. 代码与依赖校验
- 确保使用的
MySql.Data或MySqlConnector驱动版本在6.10以上,老旧版本不支持AllowLoadLocalInfile参数 - 执行
LOAD DATA LOCAL INFILE的代码示例参考:
using (MySqlConnection connection = new MySqlConnection("你的连接字符串")) { connection.Open(); string loadSql = @"LOAD DATA LOCAL INFILE 'D:/import_data.csv' INTO TABLE `target_table` FIELDS TERMINATED BY ',' ENCLOSED BY '\""' LINES TERMINATED BY '\n' IGNORE 1 ROWS"; using (MySqlCommand command = new MySqlCommand(loadSql, connection)) { command.ExecuteNonQuery(); } }
常见排查点
- 不要仅修改会话级别的
local_infile变量,该配置重启服务后会失效,必须写入配置文件 - 确认运行C#程序的操作系统账号对导入的CSV/文本文件有读取权限
- 如果使用云托管的MySQL服务,需要在云数据库控制台的参数配置页开启
local_infile参数
内容的提问来源于stack exchange,提问作者Jason Hitchings
相关产品推荐
相关产品推荐

