Moodle 3.11.2修改用户资料邮箱提示Error reading from database如何解决
Moodle修改用户邮箱触发「Error reading from database」错误解决方案
触发场景说明
该问题多出现于跨版本升级+操作系统迁移后,数据库结构同步不完整或权限配置异常导致,可按以下步骤依次排查解决:
排查&修复步骤
- 第一步:开启调试模式获取具体报错信息
登录Moodle管理员后台,进入站点管理 > 开发 > 调试,将调试消息等级调整为「开发者:额外的Moodle调试消息」,开启页面显示调试信息。此时再次尝试修改用户邮箱,即可拿到具体的SQL执行错误日志,准确定位问题根因。 - 第二步:检查核心用户表字段兼容性
从Moodle 3.9升级到3.11版本时,mdl_user表的email字段约束有调整,迁移过程中如果字段属性没有同步更新就会触发读库错误。可通过数据库命令查看字段配置:
3.11版本要求email字段为DESCRIBE mdl_user;varchar(100)类型,字符集为utf8mb4,排序规则为utf8mb4_unicode_ci,若配置不符合要求,执行ALTER语句修改即可。 - 第三步:补全执行数据库升级脚本
跨版本升级过程中如果部分SQL脚本执行中断,会导致表结构、索引、约束缺失,可重新触发升级流程补全配置:
方式1:直接访问站点/admin/index.php路径,按页面提示执行升级
方式2:命令行执行升级命令:php admin/cli/upgrade.php --non-interactive - 第四步:检查临时邮箱表完整性
Moodle 3.10版本新增了mdl_user_email_temp表用于存储待验证的临时邮箱信息,如果迁移数据库时漏迁该表,修改邮箱时就会触发读库错误。可在数据库中执行命令确认表是否存在:
若表不存在,从同版本Moodle安装包的初始SQL文件中导出该表的建表语句,手动创建即可。SHOW TABLES LIKE 'mdl_user_email_temp'; - 第五步:验证数据库用户权限
更换操作系统后如果重新配置过数据库,需确认Moodle配置的数据库账号对mdl_user、mdl_user_email_temp等相关表有SELECT、INSERT、UPDATE权限,可通过以下命令查看权限:
若权限不足,重新授予对应权限即可。SHOW GRANTS FOR '你的Moodle数据库用户名'@'localhost';
内容的提问来源于stack exchange,提问作者Ali KargarFard
相关产品推荐
相关产品推荐

