You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle跨版本恢复备份出现数据库读取错误问题咨询

Moodle跨版本迁移MySQL 8.0报错解决方案

问题根因

MySQL 8.0 已正式移除@@default_storage_engine和@@storage_engine两个系统变量,仅修改变量名称无法适配MySQL 8.0的查询逻辑。

可落地修复步骤

1. 修正数据库驱动的存储引擎查询逻辑

打开/lib/dml/mysqli_native_moodle_database.php文件,定位到获取默认存储引擎的SQL查询段,将原有使用系统变量的查询:

SELECT @@default_storage_engine AS engine
-- 或 SELECT @@storage_engine AS engine

替换为全MySQL版本兼容的查询语句:

SELECT ENGINE AS engine FROM INFORMATION_SCHEMA.ENGINES WHERE SUPPORT = 'DEFAULT'

2. 调整MySQL 8.0兼容配置

编辑MySQL配置文件(my.cnf/my.ini),添加/修改以下参数:

[mysqld]
# 适配Moodle的SQL模式要求
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
# 适配Moodle旧版驱动的认证方式
default_authentication_plugin = mysql_native_password

修改后重启MySQL服务,执行以下SQL更新数据库账号的认证规则:

ALTER USER '你的Moodle数据库用户名'@'访问地址' IDENTIFIED WITH mysql_native_password BY '你的数据库密码';
FLUSH PRIVILEGES;

3. 校验跨版本迁移流程合规性

Moodle不支持直接将低版本整站备份恢复到高版本环境,需按以下流程操作:

  • 先在原有PHP 5.5、MySQL 5.5环境中将Moodle 2.7逐步升级到Moodle 3.9,确认运行无异常后再导出整站备份,迁移到新服务器恢复
  • 若仅迁移课程数据,导出Moodle 2.7课程备份时需勾选「兼容更高版本」选项,再导入Moodle 3.9环境

4. 字符集兼容性检查

确认MySQL 8.0中Moodle数据库的字符集为utf8mb4,排序规则为utf8mb4_unicode_ci,避免旧备份导入时出现字符集乱码或报错。

内容的提问来源于stack exchange,提问作者Flora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:57:00