Magento安装抱怨InnoDB在可用时丢失

2022-08-30 11:56:30

在安装过程中,Magento 会产生以下错误:

数据库服务器不支持 InnoDB 存储引擎。

我已经修复了Magento的所有依赖关系,并使用SHOW ENGINES在命令行上仔细检查了MySQL,并且肯定有InnoDB可用(也是默认的存储引擎)。

这不是其他人可能在安装时看到的有关访问MySQL配置的问题。

注意:这是在Mac Pro上运行的(为我正在开发的域名进行简单的主机DNS重写)。


答案 1

文件的第 59 行app/code/core/Mage/Install/Model/Installer/Db/Mysql4.php

取代:

public function supportEngine()
{
    $variables  = $this->_getConnection()
        ->fetchPairs('SHOW VARIABLES');
    return (!isset($variables['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true;
}

有了这个:

public function supportEngine()
{
    $variables  = $this->_getConnection()
        ->fetchPairs('SHOW ENGINES');
    return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}

答案 2

或者不要做一个核心黑客!您应该在安装之前轻轻地覆盖安装程序模型:

将其粘贴到您的 :app/code/local/Company/InstallBugfix/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Company_InstallBugfix>
            <version>0.1.0</version>
        </Company_InstallBugfix>
    </modules>
    <global>
        <models>
            <installbugfix>
                <class>Company_InstallBugfix_Model</class>
            </installbugfix>
            <install>
                <rewrite>
                    <installer_db_mysql4>Company_InstallBugfix_Model_Installer_Db_Mysql4</installer_db_mysql4>
                </rewrite>
            </install>
        </models>
    </global>
</config>

以下在:app/code/local/Company/InstallBugfix/Model/Installer/Db/Mysql4.php

<?php
class Company_InstallBugfix_Model_Installer_Db_Mysql4 extends Mage_Install_Model_Installer_Db_Mysql4
{
    /**
     * Check InnoDB support
     *
     * @return bool
     */
    public function supportEngine()
    {
        $supportsEngine = parent::supportEngine();
        if ($supportsEngine) {
            return true;
        }
        $variables = $this
                     ->_getConnection()
                     ->fetchPairs('SHOW ENGINES');
        return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
    }
}

并启用扩展。优点是,如果mysql版本较旧,则旧的验证仍然是正确的。


推荐