php - 加载数据本地infile停止工作,它没有给出任何错误
问题描述
我有一个 PHP 脚本,我在其中上传了一个 CSV 文件,并将这个更新/插入行到 mysql 数据库中,所有这些都在 ubuntu 18.04 服务器上,这个 PHP 脚本已经运行了很多年没有问题,服务器运行了 1 年多,突然几周前,服务器或软件上的任何更改都停止工作。
奇怪的是它没有产生任何错误,没有日志错误,什么都没有,所以我无法调试。
几天前我读了很多书,没有任何运气,所以我不知道该怎么办。
在我的测试和类似问题的测试中,我发现了这一点:
- 如果我直接在服务器上运行“加载数据本地 infile”,它就可以工作
- 文件上传正常,我可以给 777 权限,没有任何变化
- 在 mysql 上启用了 infile
- apparmor 已配置
- 连接到数据库的用户具有 FILE 权限
这是使用的代码:
LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y')
正如我一开始所说,这不是新服务器,这不是新代码,已经工作了很多年,调试时我只在屏幕上收到了这个:
Query: LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y') failed
0:
其中“0:”必须是错误代码,“:”之后是错误描述。
如果我删除 LOCAL,我会收到此错误:
Query: LOAD DATA LOCAL INFILE '/path/to/temp/file' INTO TABLE pagos_nuevos CHARACTER SET latin1 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES
(cuenta, @pago, @fpago) SET pago = CAST(REPLACE(REPLACE(@pago,',',''),'$','') AS DECIMAL(10,2)), fpago = STR_TO_DATE(@fpago, '%d/%m/%Y')
not found (Errcode: 13 - Permission denied)
29:找不到文件'/var/www/html/testing/unicomer/pagos/datos/pagos/pagos al 29.csv'(错误代码:13 - 权限被拒绝)
我对一个拥有所有特权的用户进行了测试,但没有成功,所以我不知道这是 mysql 问题还是服务器问题。
非常感谢您的帮助。
解决方案
推荐阅读
- c++ - 为什么我在使用 argc 和 argv 时没有出现分段错误?
- nginx - Kubernetes 使用没有入口的代理
- javascript - 无法在功能后停止快递服务器
- powershell-remoting - 从 Get-CsCallQueue cmdlet 列出代理真实姓名
- python - 如何组合这两列?熊猫
- java - 在 JAVA 中的 apache spark 数据集中添加标头
- python - 如何使用 Xarray 将 csv 文件转换为网格?
- git - 无法使用 Netbeans IDE 克隆 git 项目,但 CLI 有效
- r - 在二项式 GLMM 上使用预测函数:产生数字而非二项式值
- python - 正则表达式匹配可能包含 ''' '' ''' 的单引号字符串