41

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

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

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

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

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

4

7 回答 7

133

文件第 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');
}
于 2013-03-15T23:10:16.437 回答
20

或者不要进行核心破解!您应该在安装之前轻轻地覆盖 Installer-Model:

将此粘贴到您的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-version 较旧,旧验证仍然正确。

于 2013-06-01T07:02:25.080 回答
5

1.9.1.0 版下载器.php

为使用downloader.php当前捆绑在1.9.1.0安装程序中的任何人提供此功能。

如果您很高兴您的 MySQL 数据库在以后的版本中支持 InnoDB(这是默认设置)。您可以安全地编辑文件以删除检查并进行所有下载。

    /**
     * Check availabe InnoDB on database.
     *
     * @return Magento_Downloader_Validator
     */
    protected function _checkDbInnoDb()
    {
        if (!$this->_connection) {
            return $this;
        }
        $this->addMessage('Database server supports InnoDB storage engine');
        return $this;
    }
于 2017-07-26T00:29:24.050 回答
0

错误已在 Magento CE 1.8 中修复,因此只需将上面的行用于 CE \leq 1.7

于 2013-09-30T06:19:42.087 回答
-1
public function supportEngine()
{
    $variables  = $this->_getConnection()->fetchPairs('SHOW ENGINES');
    return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}
于 2015-04-29T13:14:23.750 回答
-1

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

代替:

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['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true; 
*/
    return 1;
}
于 2015-06-06T06:55:32.087 回答
-1

我遇到了同样的问题,唯一有效的方法是当我将文件app/code/core/Mage/Install/Model/Installer/Db/Mysql4.php的第 59 行更改为:

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'] != 'YES');
    }

而且我在任何地方都没有找到它,所以如果您遇到困难,我保证这会解决它。

于 2016-05-30T20:43:43.937 回答