在安装过程中,Magento出现以下错误:
数据库服务器不支持InnoDB存储引擎。
我已经解决了Magento的所有依赖项,并使用MySQL命令行检查过SHOW ENGINES,确定有InnoDB可用(也是默认的存储引擎)。
这不是关于访问MySQL配置的问题,其他人可能在他们的安装中看到了这个问题。
注意:这是在Mac Pro上运行的(使用简单的主机DNS重写开发域名)。
位于文件 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'] != 'NO');
}
或者不要进行核心修改!在安装之前,您应该轻松地覆盖 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版本较旧,则仍然可以使用旧的验证方法。
这里提供给所有使用 1.9.1.0
安装程序中捆绑的 downloader.php
的人。
如果你确定你的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;
}
Magento CE 1.8中已修复了该Bug,因此对于CE \leq 1.7,请使用上面的代码行。
downloader.php
中的 protected function _checkDbInnoDb()
函数中仍然会引发此错误。如果您确信您的数据库支持 InnoDB,则可以安全地注释掉该检查。 - Lukepublic function supportEngine()
{
$variables = $this->_getConnection()->fetchPairs('SHOW ENGINES');
return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}
我遇到了同样的问题,唯一让它起作用的方法是我更改了文件 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');
}
我在任何地方都没有找到它,所以如果你正在苦苦挣扎,我保证这将解决问题。
文件 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;
}
fecthPairs
这一行呢? - OSdave
mystoragetest
(tester
int(1) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +---------------+----- - Giles Williams