Установка Magento жалуется на отсутствие InnoDB, когда он доступен


Во время установки Magento выдает следующую ошибку:

Сервер базы данных не поддерживает механизм хранения InnoDB.

Я исправил все зависимости для Magento и дважды проверил с помощью MySQL в командной строке, используя МЕХАНИЗМЫ ПОКАЗА, и, безусловно, у меня есть InnoDB (также механизм хранения по умолчанию).

Это не проблема с доступом к конфигурации MySQL, которую другие могли видеть при установке.

Примечание: Это работает на Mac Pro (с простой перезаписью DNS хостов для доменного имени, для которого я разрабатываю).

Author: random, 2013-03-16

7 answers

Строка 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');
}
 130
Author: Michael Benjamin, 2017-11-30 07:17:55

Или не делайте взлома ядра! Вы должны мягко переопределить Модель установщика перед установкой:

Вставьте это в свой 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 старше.

 20
Author: Rokko_11, 2013-08-27 18:47:05

Версия 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
Author: Luke, 2017-07-26 00:29:24

Ошибка была исправлена в Magento CE 1.8, поэтому просто используйте строки выше для CE \leq 1.7

 0
Author: Rokko_11, 2013-09-30 06:19:42
public function supportEngine()
{
    $variables  = $this->_getConnection()->fetchPairs('SHOW ENGINES');
    return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}
 -1
Author: anthony, 2015-06-06 11:25:59

Строка 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;
}
 -1
Author: Magento, 2015-06-06 11:47:54

У меня была та же проблема, и единственный способ, которым это сработало, был, когда я изменил строку 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');
    }

И я нигде его не нашел, так что, если вы испытываете трудности, я гарантирую, что это решит проблему.

 -1
Author: Wagner Maximiliano, 2016-05-30 20:43:43