Установка Magento жалуется на отсутствие InnoDB, когда он доступен
Во время установки Magento выдает следующую ошибку:
Сервер базы данных не поддерживает механизм хранения InnoDB.
Я исправил все зависимости для Magento и дважды проверил MySQL в командной строке с помощью SHOW ENGINES и, безусловно, имел доступ к 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
Или не делайте основной взлом! Вы должны переопределить 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-версия старше.
Ответ 3
ver 1.9.1.0 downloader.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;
}
Ответ 4
Ошибка была исправлена в Magento CE 1.8, поэтому просто используйте строки выше для CE\leq 1.7
Ответ 5
public function supportEngine()
{
$variables = $this->_getConnection()->fetchPairs('SHOW ENGINES');
return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}
Ответ 6
Строка 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['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true;
*/
return 1;
}
Ответ 7
У меня была одна и та же проблема, и единственным способом ее работы было изменение строки 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'] != 'YES');
}
И я не нашел его нигде, поэтому, если вы боретесь, я гарантирую, что это решит его.