Magento 2.4项目无法升级数据库,如何跳过RDBMS版本不兼容错误?
解决Magento 2.4数据库版本检查报错的临时方法
首先得明确:官方强烈不推荐绕过这个检查——MariaDB 10.1已经停止维护,存在安全漏洞和兼容性隐患。如果条件允许,优先把你的MariaDB升级到10.2-10.4版本才是长期可靠的解决方案。但如果确实需要临时绕过这个报错,以下是几种可行的方法:
方法1:修改核心验证文件(应急临时方案,不推荐长期用)
Magento的数据库版本检查逻辑在vendor/magento/framework/DB/Adapter/Pdo/Mysql.php文件里:
- 打开这个文件,找到
checkDatabaseVersion方法 - 定位到版本验证的代码块,类似这样:
$supportedVersions = [ 'MySQL-8' => '/^8\./', 'MySQL-5.7' => '/^5\.7\./', 'MariaDB-(10.2-10.4)' => '/^10\.[2-4]\./', ]; - 修改MariaDB的正则表达式,把10.1版本包含进去:
'MariaDB-(10.1-10.4)' => '/^10\.[1-4]\./', - 保存文件后,重新运行数据库升级命令:
bin/magento setup:upgrade
⚠️ 注意:修改核心文件会在你执行composer update时被覆盖,所以这只是救急方案,后续一定要升级数据库或者用更持久的方法替代。
方法2:用Composer补丁实现持久化修改
为了避免直接改核心文件被覆盖,可以用Composer补丁来保存修改:
- 在项目根目录创建
patches文件夹,新建一个补丁文件,比如magento-framework-db-version.patch - 补丁文件内容参考如下(注意替换
xxx为实际的代码行号,你可以用diff命令生成准确的补丁内容):--- vendor/magento/framework/DB/Adapter/Pdo/Mysql.php +++ vendor/magento/framework/DB/Adapter/Pdo/Mysql.php @@ -xxx,7 +xxx,7 @@ protected function checkDatabaseVersion() { $supportedVersions = [ - 'MariaDB-(10.2-10.4)' => '/^10\.[2-4]\./', + 'MariaDB-(10.1-10.4)' => '/^10\.[1-4]\./', 'MySQL-8' => '/^8\./', 'MySQL-5.7' => '/^5\.7\./', ]; - 在
composer.json的extra部分添加补丁配置:"extra": { "magento-force": "override", "patches": { "magento/framework": { "Allow MariaDB 10.1 for database upgrade": "patches/magento-framework-db-version.patch" } } } - 运行
composer install或composer update应用补丁,之后再执行bin/magento setup:upgrade
方法3:伪造数据库版本返回值(隐蔽的临时方法)
如果你不想修改版本验证的正则,也可以让Magento获取到的数据库版本是一个官方支持的版本:
- 打开
vendor/magento/framework/DB/Adapter/Pdo/Mysql.php,找到getVersion方法 - 修改它的返回值:
public function getVersion() { // 替换成一个官方支持的版本号 return '10.2.30'; // 原代码:return $this->_connection->getAttribute(\PDO::ATTR_SERVER_VERSION); } - 保存后运行升级命令,完成后记得改回原代码(或者用补丁来管理这个修改)
再次强调:以上方法都是临时绕过检查的权宜之计,长期来看必须升级你的MariaDB到官方支持的版本,否则会面临安全风险和潜在的兼容性问题。
内容的提问来源于stack exchange,提问作者user14606073
相关产品推荐
相关产品推荐

