在安装过程中,Magento 会产生以下错误:
数据库服务器不支持 InnoDB 存储引擎。
我已经修复了 Magento 的所有依赖项,并使用 SHOW ENGINES 在命令行上仔细检查了 MySQL,并且肯定有 InnoDB 可用(也是默认存储引擎)。
这不是其他人可能在安装时看到的访问 MySQL 配置的问题。
注意:这是在 Mac Pro 上运行的(对我正在开发的域名进行简单的主机 DNS 重写)。
文件第 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');
}
或者不要进行核心破解!您应该在安装之前轻轻地覆盖 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 较旧,旧验证仍然正确。
为使用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;
}
错误已在 Magento CE 1.8 中修复,因此只需将上面的行用于 CE \leq 1.7
public 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['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true;
*/
return 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');
}
而且我在任何地方都没有找到它,所以如果您遇到困难,我保证这会解决它。