使用SQLyog导入本地CSV到MySQL提示本地加载功能禁用,如何解决?
问题原因
该报错是由于MySQL默认出于安全考虑关闭了LOCAL INFILE功能,该功能要求服务端、客户端两侧同时开启才能正常使用,单侧开启都会触发该错误。
可选解决方案
方案1:修复LOAD DATA LOCAL功能(可直接使用你写好的SQL)
- 先开启服务端权限:登录MySQL服务端,执行命令
SET GLOBAL local_infile = 1;即可临时生效;如果要永久生效,修改MySQL配置文件(Windows系统为my.ini,Linux系统为my.cnf),在[mysqld]节点下添加一行local_infile=1,修改完成后重启MySQL服务。 - 再开启客户端权限:如果使用命令行连接MySQL,连接时添加参数
mysql --local-infile=1 -u 用户名 -p;如果使用SQLyog、Navicat等可视化工具,在对应连接的高级配置项中勾选「启用LOAD DATA LOCAL」选项即可。
方案2:使用可视化工具自带的导入向导(新手友好)
绝大多数MySQL可视化工具(Navicat、SQLyog、DBeaver等)都自带CSV导入功能,不需要手写SQL,跟着导入向导选择CSV文件、设置行分隔符、字段分隔符、匹配表字段即可完成导入,容错率更高,适合新手使用。
方案3:服务端路径导入(无需开启LOCAL权限)
先执行SQLSHOW VARIABLES LIKE 'secure_file_priv';查看MySQL允许读取文件的专属目录,将你的CSV文件放到该目录下,修改原SQL去掉local关键字,将文件路径替换为服务端该目录下的文件路径即可执行导入。
方案4:JDBC批量导入(适配你后续的开发需求)
你后续本来就要通过JDBC操作数据库,可以写一个简单的Java程序读取CSV文件内容,通过JDBC批量插入接口写入数据库,既完成了当前的导入需求,也可以提前熟悉JDBC操作逻辑,适配后续网页动态加载内容的开发场景。
内容的提问来源于stack exchange,提问作者Sanskar Soni
相关产品推荐
相关产品推荐

