You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.27使用LOAD DATA INFILE与mysqlimport导入数据报错求助

MySQL 8.0 数据导入报错解决方案

问题1:LOAD DATA INFILE 报错 ERROR 29 (HY000) 权限拒绝

即使文件权限设为777依然报错,由两个默认安全配置导致,对应解决方法如下:

  • 检查secure_file_priv参数限制
    MySQL 8.0默认通过该参数限制LOAD DATA操作仅能读取指定目录的文件,执行以下命令查看配置:
    SHOW VARIABLES LIKE 'secure_file_priv';
    
    • 如果返回值为指定目录(默认为/var/lib/mysql-files/):将people.txt移动到该目录下,再执行导入命令即可
    • 如果需要自定义允许目录:修改MySQL配置文件my.cnf,在[mysqld]段下添加secure_file_priv = /tmp,保存后重启MySQL服务生效
  • 关闭SELinux限制或添加权限
    服务器开启SELinux的情况下,会拦截MySQL对非授权目录的访问请求,可通过两种方式解决:
    • 临时关闭SELinux测试:执行setenforce 0后重试导入,确认是该问题后可选择永久配置权限
    • 给目标文件添加MySQL可读的SELinux上下文:chcon -t mysqld_db_t /tmp/people.txt

快捷规避方案:使用客户端本地导入模式,绕过服务端目录限制

  1. 先开启服务端本地导入权限:
SET GLOBAL local_infile = 1;
  1. 退出MySQL后,用--local-infile=1参数重新连接:
mysql -u your_username -p --local-infile=1 soverflow
  1. 执行本地导入命令,同时指定字段分隔符适配你的txt文件格式:
LOAD DATA LOCAL INFILE '/tmp/people.txt' INTO TABLE people
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';

问题2:mysqlimport 报错找不到文件

报错原因是不加--local参数时,mysqlimport默认会从服务端的数据库存储目录(默认/var/lib/mysql/你的库名/)下查找文件,所以会尝试读取/var/lib/mysql/soverflow/people.txt导致找不到文件。
解决方法:执行命令时添加--local参数,指定从客户端路径读取文件:

mysqlimport --local soverflow /tmp/people.txt -u your_username -p

如果要使用服务端读取模式,将people.txt移动到/var/lib/mysql/soverflow/目录下,同时将文件所有者改为mysql用户即可。

内容的提问来源于stack exchange,提问作者Sandeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 19:54:03