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

导入CSV文件到现有MySQL数据库报1045权限错误如何解决

问题根因

你遇到的1045报错不是普通的登录权限问题,是执行LOAD DATA INFILE语句需要额外的全局FILE权限。平时常用的查询、增删改操作只需要单库级别的权限即可,FILE属于全局级别的特殊权限,默认不会给普通用户开通,这就是为什么普通PHP脚本和phpMyAdmin能正常使用,唯独导入CSV会报错的核心原因。

另外phpMyAdmin导入CSV时默认使用LOAD DATA LOCAL INFILE模式,不需要FILE权限,所以能正常运行。


解决方案

方案1:申请开通FILE权限(不推荐)

联系主机商给你的数据库用户授予全局FILE权限,同时确认secure_file_priv配置允许读取你存放CSV的目录即可。但绝大多数共享主机不会开放这个权限,安全风险较高。

方案2:改用LOAD DATA LOCAL INFILE模式(推荐,和phpMyAdmin逻辑一致)

不需要额外权限,只要调整你的语句和命令参数即可:

对应PHP脚本修改

<?php
// 连接时开启LOCAL INFILE选项
$con = mysqli_init();
mysqli_options($con, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($con, "hostname", "username", "password", "database");

$sql = "LOAD DATA LOCAL INFILE '/home/dir/dir2/file.csv'
INTO TABLE `Table`
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\r'
(col1, col2, col3, etc.)";

$result = mysqli_query($con, $sql);

mysqli_close($con);
?>

对应mysql命令修改

mysql -hhostname -uusername -ppassword --local-infile=1 database -e "LOAD DATA LOCAL INFILE '/绝对路径/to/file.csv' INTO TABLE `Table` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"

注意要填写CSV文件的绝对路径,避免执行时找不到文件。

对应mysqlimport命令修改

mysqlimport -hhostname -uusername -ppassword --local --fields-terminated-by=',' --lines-terminated-by='\n' database /绝对路径/to/file.csv

额外注意事项

  • 表名如果是MySQL关键字(比如示例中的Table)一定要用反引号包裹,避免触发语法错误
  • 确认CSV文件的行尾换行符和你语句里写的一致,Linux下一般是\n,Windows导出的是\r\n,可以用cat -A file.csv查看行尾标识
  • 如果cron执行时提示文件找不到,统一替换为CSV的绝对路径即可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:27:03