Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy magento może używać wielu niewolników MySQL?

Biorąc pod uwagę powyższe komentarze i zakładając, że masz poprawną konfigurację replikacji baz danych.

Rozwiązanie:-

- Krok 1:

W pliku

app/etc/config.xml

Znajdź tag zamykający „core_read”

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

Dodaj Po tagu zamykającym (tyle, ile baz danych chcesz użyć) powinien wyglądać jak poniżej:

<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>

- Krok 2:

I dodaj nowe połączenie w pliku apt/etc/local.xml po (tagu zamykającym „/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>

- Krok 3:

Skopiuj plik z " app/code/core/Mage/Core/Model/Resource.php " ==TO ==> " app/code/local/Mage/Core/Model/Resource.php "

1- Znajdź chronione $_mappedTableNames;

2- Dodaj tę metodę poniżej:

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- Zmodyfikuj metodę " public function getConnection($name) " tak, aby wyglądała jak poniżej:

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 !!
}

Umożliwi to korzystanie z tylu baz danych, które określisz w kodzie XML i PHP dla połączenia core_read i połączenia default_setup dla wszystkich innych połączeń w magento ( core_write, core_setup )

Mam nadzieję, że to rozwiąże Twój problem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql kolejność według liczby wydajności

  2. Mysql CASE WHEN JOIN Błąd instrukcji

  3. Korzystanie z poprzedniego folderu danych MySQL w nowej instalacji MySQL

  4. Jaka jest najlepsza wydajność pobierania wyników MySQL EAV jako tabeli relacyjnej?

  5. Jak działa funkcja SUBSTR() w MySQL