CentOS7下phpMyAdmin导入覆盖MySQL表遇LOAD DATA系列报错如何解决
解决方案
1. 修正MySQL服务端配置(核心错误点:此前仅修改了PHP端配置,未配置MySQL服务端参数且未重启MySQL服务)
- 编辑my.cnf(一般路径为
/etc/my.cnf),在[mysqld]段落下添加2行配置:
[mysqld] local_infile = 1 secure_file_priv = ""
注意:
secure_file_priv设为空字符串代表不限制文件导入路径,直接删除该配置项不会生效,MySQL5.7默认会启用安全路径限制。
- 保存后重启MySQL服务,而非仅重启Apache:
systemctl restart mysqld - 验证配置是否生效:登录MySQL执行
SHOW VARIABLES LIKE '%local_infile%';和SHOW VARIABLES LIKE 'secure_file_priv';,确认local_infile值为ON,secure_file_priv值为空。
2. 修正PHP及phpMyAdmin配置
- 你使用aapanel面板,不要手动修改php.ini,直接在面板的「PHP7.4设置」->「配置修改」中搜索
mysqli.allow_local_infile,将值设为On,保存后重启PHP7.4-fpm服务。 - 找到phpMyAdmin的配置文件
config.default.php,添加/修改以下配置:
$cfg['Mysqli_local_infile'] = true; // 允许phpMyAdmin调用LOCAL INFILE功能 $cfg['ExecTimeLimit'] = 0; // 取消执行时间限制,避免大文件导入超时
- 重启Apache服务生效:
systemctl restart httpd
3. 正确执行导入语句
你之前的语句没有覆盖旧数据的逻辑,需要添加REPLACE关键字才能实现主键重复时覆盖旧数据:
LOAD DATA LOCAL INFILE '/database/links.csv' REPLACE INTO TABLE links FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' /* 导出的csv如果字段带引号需加这行,无引号可省略 */ LINES TERMINATED BY '\n'; /* 如果是Windows系统导出的csv,改为'\r\n' */
4. 异常排查
- 若仍提示
mysqli.allow_local_infile相关错误,新建phpinfo文件查看该配置实际生效值,确认面板配置没有被覆盖。 - csv文件不需要设777权限,只需保证MySQL运行用户(一般为mysql)有文件读取权限即可。
内容的提问来源于stack exchange,提问作者Michaelp
相关产品推荐
相关产品推荐

