Windows下将大体积TXT数据导入MySQL Workbench遇权限及命令问题求助
解决MySQL 8.0 + Workbench导入大TXT文件的权限与命令禁用问题
我来帮你一步步搞定这个导入难题,针对你用的MySQL 8.0和Workbench环境,咱们从两个核心错误入手排查:
1. 先搞定LOAD DATA INFILE的权限拒绝问题(OS errno 13)
这个错误本质是MySQL服务器进程没有读取目标文件的权限,或者你写的路径不符合服务器要求:
- 先确认路径逻辑:
LOAD DATA INFILE是让MySQL服务器去读文件,所以路径是服务器端的文件系统路径,不是你Workbench所在本地机器的路径(除非服务器和Workbench在同一台电脑)。- 如果你是本地安装的MySQL,先执行
SHOW VARIABLES LIKE 'secure_file_priv';,这个变量指定了MySQL允许读取文件的安全目录,把你的TXT文件移到这个目录里,然后修改导入命令的路径为这个目录的绝对路径,比如:LOAD DATA INFILE "/var/lib/mysql-files/file.txt" INTO TABLE your_table CHARACTER SET utf8 FIELDS TERMINATED BY "," LINES TERMINATED BY "\r\n"; - 如果一定要用自定义路径,得给MySQL的运行用户加权限:
- Windows:右键文件→属性→安全→添加
NETWORK SERVICE用户,赋予读取权限; - Linux:执行
chown mysql:mysql /my_path/file.txt和chmod 644 /my_path/file.txt,把文件所有权转给MySQL用户。
- Windows:右键文件→属性→安全→添加
- 如果你是本地安装的MySQL,先执行
2. 解决LOAD DATA LOCAL INFILE被禁止的问题(Error Code:1148)
MySQL 8.0默认禁用了本地导入功能,而且Workbench还有额外的开关要开,得两步走:
- 第一步:开启服务器端的
local_infile
打开my.ini(Windows)或my.cnf(Linux),在[mysqld]区块里添加:
注意不要加local_infile=1loose-前缀,然后必须重启MySQL服务!重启后执行SHOW VARIABLES LIKE 'local_infile';,确认结果是ON才生效。 - 第二步:开启Workbench的本地导入支持
- 打开Workbench,点击
Edit → Preferences → SQL Editor,找到Enable LOAD DATA LOCAL INFILE选项,勾选它,然后重启Workbench; - 另外,编辑你的数据库连接:进入连接配置的
Advanced标签页,在Others输入框里添加local-infile=1,保存后重新连接数据库; - 注意哦!你原来的命令里
INTO TABLE "table"是错误的,MySQL的表名不需要双引号,改成INTO TABLE your_table_name(替换成你的实际表名)。
- 打开Workbench,点击
3. 给你加个提速buff(针对大文件导入)
既然你觉得导入向导慢,用LOAD DATA的时候可以加这些参数大幅提速:
- 关闭自动提交、唯一检查和外键检查,导入完成后再恢复:
SET AUTOCOMMIT=0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0; -- 这里放你的导入命令 LOAD DATA LOCAL INFILE "C:/your_local_file_path/file.txt" INTO TABLE your_table_name CHARACTER SET utf8 FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' -- 如果你的字段有双引号包裹,就加上这个 LINES TERMINATED BY "\r\n"; COMMIT; SET UNIQUE_CHECKS=1; SET FOREIGN_KEY_CHECKS=1;
- 如果你的表有索引,导入前可以先删除索引,导入完成后再重建,比边导入边建索引快很多。
内容的提问来源于stack exchange,提问作者Lucas Heise
相关产品推荐
相关产品推荐

