Во время установки Magento производит следующую ошибку:
Сервер базы данных не поддерживает механизм хранения InnoDB.
- Debug PDO mySql вставляет NULL в базу данных вместо пустой
- Функция поиска с несколькими критериями - PHP / MySQL
- Отображать изображения по очереди со следующей и предыдущей функциональностью
- стандартный метод получения уведомления из базы данных об изменении / вставке
- Php form проверяется, когда значение флажка в массиве mysql-запроса?
- PHP Неустранимая ошибка: класс PDO не найден
Я исправил все зависимости для Magento и дважды проверил MySQL в командной строке с помощью SHOW ENGINES и, безусловно, имел доступ к 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-версия старше.
Поместите это для тех, кто использует downloader.php
настоящее время 1.9.1.0
установщик 1.9.1.0
.
Если вы счастливы, что ваша база данных MySQL поддерживает InnoDB (это значение DEFAULT) в более поздних версиях. Вы можете безопасно редактировать файл, чтобы удалить чек и всю загрузку.
/** * 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'); }
Строка 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; }
У меня была одна и та же проблема, и единственным способом ее работы было изменение строки 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'); }
И я не нашел его нигде, поэтому, если вы боретесь, я гарантирую, что это решит его.