一、问题概述
Flarum论坛(版本1.8.12,PHP 8.3.20,MySQL 8.4.8)出现500 Internal Server Error,日志提示 PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away,核心触发源为 blomstra/database-queue 扩展(数据库队列扩展),且后续出现Flarum控制台命令失效、Composer依赖混乱等衍生问题。
前置背景:更新扩展后出现问题,数据库配置未改动,扩展安装数量较多(30+)。
二、核心错误定位
- 错误核心原因
更新后的 blomstra/database-queue 扩展与当前Flarum版本(1.8.12)不兼容,其队列工作进程维持MySQL长连接时,触发连接超时断开,且扩展相关代码持续执行,反复抛出错误。
衍生问题
Flarum控制台命令失效:extension:list、queue:clear 等命令提示“未定义”,无法通过常规命令禁用扩展。
Composer依赖混乱:扩展更新时破坏 illuminate/queue 等核心组件,且 composer.lock 仍记录问题扩展,删除扩展文件夹后会自动重装。
三、排查过程
初步排查:确认数据库配置无改动,锁定错误日志中关联的 blomstra/database-queue 扩展,尝试用 php flarum ext:disable blomstra/database-queue 禁用,提示“无此扩展ID”。
命令修正:发现Flarum无 ext:list 简写命令,需用完整命令 php flarum extension:list 查看扩展,但执行后仍提示命令未定义,确认控制台命令体系损坏。
数据库排查:尝试通过SQL禁用扩展,发现数据表前缀与默认不一致(实际为cathg,默认 flarum),且未找到匹配的扩展配置表,暂时放弃数据库操作。
依赖排查:执行 composer install 时,发现Composer会自动重装 blomstra/database-queue,原因是 composer.json/composer.lock 仍保留该扩展依赖记录。
四、解决方案(终极实操步骤)
- 彻底移除问题扩展(核心步骤)
因控制台命令失效,需通过Composer移除依赖+手动删除文件,避免自动重装:
切换到Flarum根目录(适配当前环境路径)
cd /www/sites/bbs.cathi.cn/index/flarum
正确移除扩展(无需--no-dev,该参数不适用于composer remove)
composer remove blomstra/database-queue
手动删除残留扩展文件(兜底,确保彻底移除)
rm -rf vendor/blomstra/database-queue/
- 修复Flarum核心依赖与权限
重新安装依赖,优化自动加载,修复损坏组件
composer install --no-dev --optimize-autoloader
修复文件权限,避免PHP读写失败(适配1Panel默认www-data用户)
chmod -R 775 storage/ vendor/ public/
chown -R www-data:www-data storage/ vendor/ public/
- 清空缓存(绕过命令行,手动操作)
删除缓存文件和视图文件,清除残留配置
rm -rf storage/cache/* storage/views/*
- 调整MySQL参数(避免后续连接超时)
进入1Panel → 数据库 → MySQL → 配置修改,在 [mysqld] 区块新增以下参数,解决连接超时和数据包限制问题:
[mysqld]
host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
新增连接超时与数据包配置
wait_timeout = 86400 # 连接空闲超时设为24小时
interactive_timeout = 86400
max_allowed_packet = 64M # 增大数据包上限
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
保存后重启MySQL服务(1Panel界面操作)。
- 重启服务验证
在1Panel依次重启:MySQL → Nginx/Apache,访问论坛 https://bbs.cathi.cn,确认500错误消失。
五、避坑要点
Composer命令避坑:composer install 无 --force 选项,强制更新需用 composer update --force;composer remove 无 --no-dev 选项,直接执行即可。
扩展ID与依赖避坑:Flarum扩展命令禁用用短ID(blomstra-database-queue),Composer操作需用完整包名(blomstra/database-queue);移除扩展必须用 composer remove,否则 composer install 会自动重装。
数据库表前缀避坑:Flarum默认前缀为 flarum,若安装时自定义(如本次 cathg),执行SQL需替换前缀,避免提示“表不存在”。
命令行避坑:Flarum无 ext:list 简写,查看扩展需用完整命令 php flarum extension:list;若命令失效,优先修复Composer依赖。
六、后续优化建议
扩展管理:一次仅更新1个扩展,更新前用 composer update --dry-run 预览依赖冲突;定期清理无用扩展,避免过多扩展导致兼容问题。
废弃包替换:终端提示的废弃包(如 blomstra/flarum-redis、swiftmailer/swiftmailer),逐步替换为替代包(如 fof/redis、symfony/mailer),提升稳定性。
备份策略:定期备份Flarumconfig.php 文件和数据库,更新扩展前先备份,避免出现问题无法回滚。
参数监控:后续可定期查看MySQL连接参数(show variables like '%timeout%'),确认配置生效;监控论坛日志,及时排查潜在错误。
七、总结
本次问题核心为 blomstra/database-queue扩展不兼容导致MySQL连接超时,衍生出命令行失效、依赖混乱等问题。解决关键是“彻底移除问题扩展+修复依赖+优化MySQL连接参数”,避开Composer命令、表前缀等常见坑点,即可恢复论坛正常访问。后续需规范扩展更新和备份流程,减少同类问题复发。