Mac端MySQL Workbench报ERROR 1290错误如何解决?
问题根因
触发ERROR 1290的核心原因是secure_file_priv参数值为NULL时,MySQL服务端默认禁止所有文件导入导出操作,仅开启local_infile无法绕过该限制。macOS环境下MySQL安装后默认不生成用户可编辑的全局配置文件,这是你找不到.cnf/.ini配置文件的原因。
方案1:无需改配置、无需重启MySQL(最快生效)
你之前使用的LOAD DATA INFILE语法默认要求MySQL服务端直接读取服务端主机文件系统的文件,必须受secure_file_priv路径限制。只要加LOCAL关键字,就会切换为客户端侧读取本地文件再传输给服务端的模式,完全绕过secure_file_priv的限制,操作步骤:
- 断开当前MySQL连接,重新建立连接时开启本地文件权限:
- 命令行连接使用如下命令:
mysql -u 你的数据库用户名 -p --local-infile=1- 如果使用Navicat、DBeaver、DataGrip等GUI工具,在连接配置的高级/驱动设置页,勾选「允许LOAD DATA LOCAL」选项,确认已添加
OPT_LOCAL_INFILE=1配置后保存重连。
- 重连后执行调整后的导入命令:
LOAD DATA LOCAL INFILE '/Users/username/Desktop/folder/data.csv' INTO TABLE citibike_data FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
如果导入后出现字段错位、内容乱码,大概率是csv换行符不匹配,Windows生成的csv把LINES TERMINATED BY改成'\r\n'即可
方案2:修改配置永久生效(适合长期频繁导入文件的场景)
如果不想每次导入都加LOCAL关键字,可以手动创建MySQL配置文件调整secure_file_priv路径:
- 先确认MySQL配置存放路径:
- Homebrew安装的MySQL:M系列芯片路径为
/opt/homebrew/etc/,Intel芯片路径为/usr/local/etc/ - 官方dmg包安装的MySQL:路径为
/etc/或/usr/local/mysql/etc/ - 找不到路径可以登录MySQL执行
SHOW VARIABLES LIKE 'basedir';,返回的安装根目录下的etc文件夹就是配置存放路径
- Homebrew安装的MySQL:M系列芯片路径为
- 在对应路径下新建
my.cnf文件,写入如下配置:
[mysqld] secure_file_priv='/Users/username/Desktop/folder/' local_infile=1 [client] local_infile=1
secure_file_priv填写你存放csv文件的文件夹路径即可,不要写到具体文件名,配置后MySQL允许读写该文件夹下所有文件
3. 重启MySQL服务:
- Homebrew安装的执行命令:
brew services restart mysql - 官方dmg安装的打开系统设置,找到MySQL选项,先停止服务再启动即可
- 重连MySQL后执行
SHOW VARIABLES LIKE "secure_file_priv";,确认返回值是你配置的文件夹路径,直接执行原来的LOAD DATA命令即可正常导入。
百万行数据导入优化&踩坑排查
- 路径校验:macOS路径大小写敏感,确认路径里的用户名、文件夹名和实际完全一致,不要把
Desktop误写为desktop - 权限问题:如果提示文件权限拒绝,右键点击csv所在文件夹,选择「显示简介」-「共享与权限」,给
everyone用户开放读权限即可 - 导入速度优化:百万行数据导入前临时关闭事务提交、唯一校验、外键校验,导入完成后再恢复,速度可提升3-5倍:
-- 导入前执行 SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; -- 这里执行LOAD DATA导入命令 -- 导入完成后执行 COMMIT; SET unique_checks=1; SET foreign_key_checks=1;
内容的提问来源于stack exchange,提问作者Crystal
相关产品推荐
相关产品推荐

