MySQL 8.0加载本地数据失败,配置my.ini后仍报错求排查方向
问题背景
此前Java程序可正常将纯文本文件数据上传至MySQL 5.7数据库,迁移至MySQL 8.0并更换mysql-connector-java-8.0.22.jar重新编译后,执行LOAD DATA LOCAL INFILE时出现报错:
Loading local data is disabled: this must be enabled on both the client and server sides
已完成的操作:
- 在my.ini中配置
[client]和[mysqld]段的local_infile = 1,secure-file-priv已设置为"C:/ProgramData/MySQL/MySQL Server 8.0/Uploads" - 重启MySQL服务后,执行
SHOW VARIABLES LIKE 'local_infile';显示local_infile = ON - Java核心代码片段:
connection = DriverManager.getConnection("jdbc:mysql://192.168.1.5:3306/testdb?user=root&password=pwd123"); stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); stmt.executeUpdate("LOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/something.csv' INTO TABLE data FIELDS TERMINATED BY ';' LINES TERMINATED BY '' (field1,field2,field3,field4)");
- Java编译环境为JDK 1.8.0_281,错误仍未解决。
排查方向
- JDBC连接串需开启本地文件加载权限:MySQL 8.0的JDBC驱动默认禁用本地文件加载,必须在连接URL中添加
&allowLoadLocalInfile=true,修改后连接串示例:connection = DriverManager.getConnection("jdbc:mysql://192.168.1.5:3306/testdb?user=root&password=pwd123&allowLoadLocalInfile=true"); - 验证客户端与服务端的local_infile参数一致性:通过MySQL命令行客户端连接服务器,分别执行
SHOW GLOBAL VARIABLES LIKE 'local_infile';和SHOW SESSION VARIABLES LIKE 'local_infile';,确认全局和当前会话的参数均为ON;同时手动在命令行执行LOAD DATA LOCAL INFILE语句,排除Java程序本身的问题。 - 检查文件路径与权限:确认CSV文件确实存在于
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads目录,且MySQL服务运行用户对该目录及文件有读取权限。 - 确认配置文件是否生效:执行
SHOW VARIABLES LIKE 'config_file';查看MySQL当前加载的配置文件路径,确认是否为你修改的my.ini,避免服务重启后未加载新配置。 - 排查驱动兼容性:尝试升级
mysql-connector-java至更稳定的8.0.x版本(如8.0.36),排除驱动版本bug导致的问题。 - 检查连接复用问题:若程序使用连接池,需重启Java程序或清空连接池,确保新连接使用了修改后的URL参数,避免复用未开启权限的旧连接。
内容的提问来源于stack exchange,提问作者McCo
相关产品推荐
相关产品推荐

