Mysql
 sql >> база данни >  >> RDS >> Mysql

Може ли magento да използва множество подчинени MySQL?

Предвид вашите коментари по-горе и ако приемем, че имате правилна настройка за репликация на вашите бази данни.

Решение :-

- Стъпка 1:

Във файл

app/etc/config.xml

Намерете затварящ маркер "core_read"

<resources>
    ....
    <core_read>
            <connection>
                <use>default_read</use>
            </connection>
        </core_read>
    ....
</resources>

Добавяне След затварящия маркер (колкото базите данни искате да използвате) трябва да изглежда по-долу:

<resources>
    ....
        <core_read>
            <connection>
                <use>default_read</use>
            </connection>
        </core_read>
        <slave_db_1>
            <connection>
                <use>slave_one_db</use>
            </connection>
        </slave_db_1>
        <slave_db_2>
            <connection>
                <use>slave_two_db</use>
            </connection>
        </slave_db_2>
    ....
</resources>

- Стъпка 2:

И добавете новата връзка във вашия apt/etc/local.xml след ("/default_setup> " затварящ маркер)

<resources>
    ....            
        <slave_one_db>
            <connection>
                <host><![CDATA[localhost]]></host>
                <username><![CDATA[slave_one_db_user]]></username>
                <password><![CDATA[slave_one_db_password]]></password>
                <dbname><![CDATA[slave_db_one_name]]></dbname>
                <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                <model><![CDATA[mysql4]]></model>
                <type><![CDATA[pdo_mysql]]></type>
                <pdoType><![CDATA[]]></pdoType>
                <active>1</active>
            </connection>
        </slave_one_db>
        <slave_two_db>
            <connection>
                <host><![CDATA[localhost]]></host>
                <username><![CDATA[slave_tow_db_user]]></username>
                <password><![CDATA[slave_tow_db_password]]></password>
                <dbname><![CDATA[slave_db_one_tow]]></dbname>
                <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                <model><![CDATA[mysql4]]></model>
                <type><![CDATA[pdo_mysql]]></type>
                <pdoType><![CDATA[]]></pdoType>
                <active>1</active>
            </connection>
        </slave_two_db>
    ....
</resources>

- Стъпка 3:

Копирайте файла от " app/code/core/Mage/Core/Model/Resource.php " ==TO ==> " app/code/local/Mage/Core/Model/Resource.php "

1- Намерете защитени $_mappedTableNames;

2- Добавете този метод по-долу:

public function getSlaveDb()
{
    $prefix = 'slave_db_'; // prefix for the slaves databased in the xml file
    $cookieExpireTime = 1209600; // 2 weeks Cookie ( database selection ) expire time
    $dbArray = array(1,2); // All slaves Db in-case the cookie has invalid value
    $slaveDb = array_rand( array_flip($dbArray),1 ); // How to alternate between databases ( in this demo i just use 2 database ) adjust the selection of the database to fit hoe many database you want to use !
    if(!isset($_COOKIE['read_db']) || !in_array($_COOKIE['read_db'],$dbArray)) // Check for the cookie values
    {
        setcookie("read_db", $slaveDb, time()+$cookieExpireTime); // set the current database to the user in cookie so next time user use same connection to database ! to avoid jumping or hopping on different databases in short time
    }else{
        $slaveDb = $_COOKIE['read_db']; // return the database selected if the user has it in the cookies
    }
    return $prefix.$slaveDb;
}

3- Променете метода " public function getConnection($name) ", за да изглежда по-долу:

public function getConnection($name)
{
    if($name =='core_read') // Only applied for READ Connections !!!
    {
        $name = $this->getSlaveDb(); // change the name of the connection to the one we get from our main method
    }
    //....... Leave the rest of the function as it is !!
}

Това ще ви позволи да използвате толкова бази данни, които посочите в XML и PHP КОД за връзка core_read и връзката default_setup за всички други връзки в magento ( core_write, core_setup )

Надявам се това да реши проблема ви.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Символите, които трябва да знам за SQL инжекция

  2. Php лотарията издава проблеми с няколко печеливши

  3. Генериране на Javascript масив от Mysql select

  4. Проверете свойството на свързан модел в Yii

  5. Инсталиране на MySQL-Python - Не можа да се изгради яйцето