php - Magento 설치시 InnoDB가 없을 때 누락되었다고 불평합니다




mysql (7)

파일 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');
}

설치하는 동안 Magento는 다음 오류를 생성합니다.

데이터베이스 서버는 InnoDB 스토리지 엔진을 지원하지 않습니다.

나는 Magento에 대한 모든 의존성을 수정했고, SHOW ENGINES를 사용하여 명령 행에서 MySQL을 두 번 확인했으며, InnoDB를 사용할 수있게했다. (기본 저장소 엔진이기도하다.)

다른 사람들이 설치시 보았을 수도있는 MySQL 구성에 대한 액세스에 관한 문제는 아닙니다.

참고 :이 프로그램은 Mac Pro에서 실행됩니다 (개발중인 도메인 이름에 대한 간단한 호스트 DNS 재 작성 사용).


나는 똑같은 문제를 겪고 있었고, 그것이 작동하는 유일한 방법은 내가 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');
    }

그리고 나는 그것을 어디에서도 발견하지 못했습니다. 그렇게하면 고군분투하면 해결할 수 있습니다.


Magento CE 1.8에서 버그가 수정되었으므로 위의 줄을 CE \ leq 1.7에 사용하십시오.


ver 1.9.1.0 downloader.php

1.9.1.0 인스톨러에 현재 번들되어있는 downloader.php 사용하고있는 사람이라면 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;
    }

아니면 코어 해킹을하지 마십시오! 설치하기 전에 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 다음을 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 버전이 오래된 경우 이전 유효성 검사가 여전히 올바른 것입니다.


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

linepogl의 답을 바탕으로 ... 당신은 current() 호출을 피함으로써 훨씬 더 효율적으로 만들 수 있습니다.

for ($value = end($array); ($key = key($array)) !== null; $value = prev($array)) {
     // ... do something with $key => $value
}




php mysql magento innodb