升级Moodle 3.4.2+时MariaDB版本不符的解决方法求助
解决Moodle 3.4.2+升级时的数据库版本检测问题
首先得澄清一个核心事实:MariaDB 10.2.14完全满足Moodle要求的MySQL 5.5.31版本标准——MariaDB 10.x作为MySQL的分支,10.2.x的功能兼容性远高于MySQL 5.5,问题出在Moodle的版本检测逻辑误判了MariaDB的版本号格式。
下面是具体的解决步骤:
1. 先确认真实的数据库版本
先登录你的数据库,执行以下命令确认实际版本:
SELECT VERSION();
或者在服务器终端执行:
mysql -V
如果返回的是10.2.14-MariaDB,那说明数据库本身是符合要求的,只是Moodle的检测代码把版本号解析错了(比如把10.2.14误拆成了5.5.5.10.2.14)。
2. 修复Moodle的版本检测逻辑
Moodle 3.4.x本就支持MariaDB,只是可能存在小的检测bug。你需要修改Moodle的数据库检测文件:
- 找到Moodle安装目录下的
lib/db/mysql.php文件 - 定位到负责版本验证的代码块,通常是类似这样的逻辑:
$version = moodle_mysql_version($db); if ($version < 50531) { throw new ddl_exception('mysqlversionrequired', '5.5.31'); } - 修改这段代码,增加对MariaDB的判断,让系统正确识别MariaDB版本的兼容性:
这样就能让Moodle正确识别MariaDB的版本,绕过错误的版本限制。$versionstring = $db->get_server_info(); // 优先处理MariaDB版本判断 if (strpos($versionstring, 'MariaDB') !== false) { // MariaDB 10.0及以上完全兼容MySQL 5.5.31+ if (version_compare($versionstring, '10.0.0', '>=')) { // 跳过后续的MySQL版本检测 return; } } // 原有的MySQL版本判断逻辑 $version = moodle_mysql_version($db); if ($version < 50531) { throw new ddl_exception('mysqlversionrequired', '5.5.31'); }
3. 应急方案:临时绕过版本检测(不推荐长期使用)
如果你需要快速完成升级,可以临时注释掉版本检测的异常抛出代码,但升级完成后建议恢复并修复检测逻辑,避免后续出现其他兼容性问题。
4. 检查PHP数据库扩展
如果上述方法无效,可能是你的PHP数据库扩展(mysqli或mysqlnd)获取的版本号有误。可以创建一个简单的PHP脚本测试:
<?php $conn = mysqli_connect('localhost', '你的数据库用户名', '你的数据库密码'); echo mysqli_get_server_info($conn); ?>
如果返回的版本号格式异常(比如5.5.5.10.2.14),建议更新你的PHP mysqli/mysqlnd扩展到最新版本,确保能正确识别MariaDB的版本。
内容的提问来源于stack exchange,提问作者Ezequiel Villanueva
相关产品推荐
相关产品推荐

