背景:我在 Ubuntu 18.04 LTS 下的 Apache2 网络服务器上运行 cqpweb,这是一个用 PHP 编写并连接到 mysql 数据库的语料库查询接口。Ubuntu 服务器是从头开始设置的,目前没有对 mysql 或 php 进行手动配置。
cqpweb 运行顺利,除非它开始抛出如下错误消息:
A MySQL query did not run successfully!
Original query: LOAD DATA LOCAL INFILE '/data2/cqpweb/cach/tab_dist_fycel9oplk' INTO TABLE `db_dist_g2f3ndxf40` FIELDS ESCAPED BY '' /* from User: knappen |
Function: create_db() | 2019-Apr-25 11:23:01 */
Error # 0:
这发生在一夜之间。类似的查询在 4 月 24 日 17:55(当地时间,柏林时区)肯定有效,但在错误消息中给出的时间却中断了。
问题:是否存在某种自动更新或升级会导致这种行为。
附加信息:
php --version
PHP 7.2.17-0ubuntu0.18.04.1 (cli) (built: Apr 18 2019 14:12:38) ( NTS )
mysql --version
mysql Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using EditLine wrapper
检查一些相关的日志文件:
/var/log/dkpg.log
:2019-04-24 14:47:54 至 2019-04-26 06:26:23 之间无条目
/var/log/apt/history.log
:2019-04-24 14:47:54 至 2019-04-26 06:26:23 之间无条目
/var/log/unattended-upgrades/unattended-upgrades.log
:
2019-04-25 06:24:53,776 INFO Initial blacklisted packages:
2019-04-25 06:24:53,778 INFO Initial whitelisted packages:
2019-04-25 06:24:53,778 INFO Starting unattended upgrades script
2019-04-25 06:24:53,778 INFO Allowed origins are: o=Ubuntu,a=bionic, o=Ubuntu,a=bionic-security, o=UbuntuESM,a=bionic
2019-04-25 06:24:57,138 INFO No packages found that can be upgraded unattended and no pending auto-removals
更多发现:
表单 /var/log/apache2/error.log:
[Thu Apr 25 06:25:03.544172 2019] [mpm_prefork:notice] [pid 1244] AH00171: Graceful restart requested, doing restart
这次重启是由于 cron 作业执行脚本所致/etc/cron.daily/apache2
。因此可能会发生影响较早安装但在关键时间间隔内夜间生效的 apache2 的更改。
相关问题,排除尺寸限制等其他潜在原因:Ubuntu 18.04 上 mysql 的大小限制是多少以及如何增加它们?
编辑:由于每天都有 cron 作业重新启动 Apache2,因此以下是history.log
2019-04-24 06:25:00 至 2019-04-25 06:25:00 之间的一些更改
Start-Date: 2019-04-24 06:52:06
Commandline: /usr/bin/unattended-upgrade
Upgrade: distro-info-data:amd64 (0.37ubuntu0.3, 0.37ubuntu0.4)
End-Date: 2019-04-24 06:52:07
Start-Date: 2019-04-24 14:46:57
Commandline: apt-get upgrade
Requested-By: knappen (1000)
Upgrade: php7.2-common:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), php7.2-cli:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), ureadahead:amd64 (0.100.0-20, 0.100.0-21), linux-libc-dev:amd64 (4.15.0-47.50, 4.15.0-48.51), libsystemd0:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), php7.2-mysql:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), language-selector-common:amd64 (0.188.1, 0.188.2), udev:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), plymouth-theme-ubuntu-text:amd64 (0.9.3-1ubuntu7.18.04.1, 0.9.3-1ubuntu7.18.04.2), php7.2-json:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), php7.2-opcache:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), linux-signed-generic:amd64 (4.15.0.47.49, 4.15.0.48.50), libudev1:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), libplymouth4:amd64 (0.9.3-1ubuntu7.18.04.1, 0.9.3-1ubuntu7.18.04.2), python3-distupgrade:amd64 (1:18.04.30, 1:18.04.31), ubuntu-release-upgrader-core:amd64 (1:18.04.30, 1:18.04.31), systemd-sysv:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), php7.2-readline:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1), libpam-systemd:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), systemd:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), libnss-systemd:amd64 (237-3ubuntu10.20, 237-3ubuntu10.21), plymouth:amd64 (0.9.3-1ubuntu7.18.04.1, 0.9.3-1ubuntu7.18.04.2), libapache2-mod-php7.2:amd64 (7.2.15-0ubuntu0.18.04.2, 7.2.17-0ubuntu0.18.04.1)
End-Date: 2019-04-24 14:47:54
答案1
在 cwb 邮件列表的 Stefan Evert 和 Andrew Hardie 的帮助下,找到了导致这种奇怪行为的原因,并通过在以下配置中设置解决了这个问题/etc/php/7.2/apache2/php.ini
; Allow accessing, from PHP's perspective, local files with LOAD DATA statements
; http://php.net/mysqli.allow_local_infile
mysqli.allow_local_infile = On
4 月 18 日,从 PHP 7.2.15 过渡到 PHP 7.2.17 时,默认设置被悄悄更改,并推送到 Ubuntu 发行版。
更多详细信息和一些 cqpweb 内部替代方案可参见CWB 邮件列表中的这篇文章
补充说明:PHP 即将推出的版本将针对所述情况抛出错误,并显示一条错误消息,请参阅PHP::错误#77956