Owncloud 升级因 MySQL 超时而失败

Owncloud 升级因 MySQL 超时而失败

我刚刚升级到了新版 Owncloud。安装 .deb 包后,我运行

sudo -u www-data php /var/www/owncloud/occ upgrade

这给了我:

 oc_appconfig                             
  1/24 [=>--------------------------]   4%Doctrine\DBAL\Exception\DriverException: An exception occurred while executing 'SET unique_checks=1':

SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Update failed

在线研究表明这可能是 MySQL 超时问题,因此我创建了/etc/mysql/my.cnf以下内容:

[mysqld]
interactive_timeout=86400
wait_timeout=86400
max_allowed_packet=521M

然后我重启了 MySQL 并重试——但无济于事。大多数情况下,步骤 1 会失败;有时我会进行到步骤 3(总是出现相同的 SQL 命令超时)。

操作系统是 Raspbian,在 Raspberry Pi 3 上运行。

什么可以解决这个问题?

答案1

服务器可能丢弃了不正确或过大的数据包。如果 mysqld 收到过大或不正确的数据包,它会认为客户端出现了严重问题并关闭连接。要解决此问题,您需要增加max_allowed_packetmy.cnf 文件中的最大数据包大小限制,然后重新启动 MySQL 服务器:(/etc/init.d/mysql restart)。

答案2

错误消息

SQLSTATE[HY000]:常规错误:2006 MySQL 服务器已消失

可能意味着几件事:通常它是指超时,可以通过增加超时值(默认值为 8 小时)来纠正,或表示超出了允许的数据包大小,可以通过增加max_allowed_packet当 MySQL 服务器在操作过程中崩溃时也会发生这种情况,因此当前两个选项没有提供任何帮助时请检查这一点。

经过进一步的研究,我查看了 MySQL 日志。其中有一个名为的空文件/var/log/mysql.err,以及一些指示日志轮换的文件。

然后运行ps -ef | grep mysql给了我 MySQL 进程的完整命令行,其中包含日志文件的参数,结果是/var/lib/mysql/<hostname>.err

检查此文件发现,MySQL 因数据损坏而不断崩溃,可能会影响oc_filecache。这解释了更新失败的原因——如何从损坏中恢复将是一个单独问题。occ 在进度条上方显示的字符串似乎是发生错误时正在处理的表(如果从 MySQL 日志中看不清楚,则需要仔细查看才能找到该表)。

相关内容