Magento install complains about missing InnoDB when it is available

42,722

Solution 1

Line 59 of the file app/code/core/Mage/Install/Model/Installer/Db/Mysql4.php

Replace:

public function supportEngine()
{
    $variables  = $this->_getConnection()
        ->fetchPairs('SHOW VARIABLES');
    return (!isset($variables['have_innodb']) || $variables['have_innodb'] != 'YES') ? false : true;
}

with this:

public function supportEngine()
{
    $variables  = $this->_getConnection()
        ->fetchPairs('SHOW ENGINES');
    return (isset($variables['InnoDB']) && $variables['InnoDB'] != 'NO');
}

Solution 2

Or don't do a core-hack! You should override the Installer-Model softly before Installation:

Paste this in your 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>

And following in 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');
    }
}

And enable the extension. The advantage is, that the old validation is still correct, if the mysql-version is older.

Solution 3

ver 1.9.1.0 downloader.php

Putting this up for anyone thats using the downloader.php currently bundled in the 1.9.1.0 installer.

If you're happy that your MySQL Database does support InnoDB (It's the DEFAULT) in later versions. You can safely edit the file to remove the check and all the download to take place.

    /**
     * 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;
    }
Share:
42,722
Giles Williams
Author by

Giles Williams

Updated on July 09, 2022

Comments

  • Giles Williams
    Giles Williams almost 2 years

    During installation, Magento produces the following error:

    Database server does not support the InnoDB storage engine.

    I've fixed all the dependancies for Magento, and double checked with MySQL on the command line using SHOW ENGINES and definitely have InnoDB available (also the default storage engine).

    This isn't an issue about access to MySQL config which others might have seen on their install.

    Note: This is running on a Mac Pro (with a simple hosts DNS rewrite for the domain name I am developing for).

  • Daniel West
    Daniel West about 11 years
    Nice one, spent the last hour trying to figure this out
  • Greg
    Greg almost 11 years
    bad idea to edit core code, check answer below: stackoverflow.com/a/16870033/299774
  • Dennis
    Dennis almost 11 years
    This change is part of the master branch at magento2, so I don't think it's going to be an issue! github.com/magento/magento2
  • Jpepper
    Jpepper over 10 years
    Thank you so much! I fought this fore a few hours!
  • OSdave
    OSdave almost 9 years
    why do you bother to change the fecthPairs line if you are returning true anyway just after?
  • Edward J Beckett
    Edward J Beckett almost 9 years
    Re "Don't do a core hack" ~ True ... however, the core dev team should be responsible for backporting compat...
  • Ashwani Shukla
    Ashwani Shukla over 8 years
    what if it doesn't help with the magento 1.9.2.0 as the code update mentioned here is already fixed in this version
  • Doug McLean
    Doug McLean over 8 years
    This is a bad idea, maybe even dangerous. You're suggesting we pretend InnoDB is always enabled, rather than actually checking.
  • Luke
    Luke almost 7 years
    Given it's just the protected function _checkDbInnoDb() function that still throws this error in downloader.php If you're confident your Database does support InnoDB - You can safely comment out the check.