sql >> Database teknologi >  >> RDS >> Mysql

Kan magento bruge flere MySQL-slaver?

Givet dine kommentarer ovenfor og forudsat at du har korrekt replikeringsopsætning af dine databaser.

Løsning :-

- Trin 1:

I fil

app/etc/config.xml

Find "core_read" afsluttende tag

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

Tilføj Efter det afsluttende tag (så mange som databaser du vil bruge) skulle det se ud som nedenfor:

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

- Trin 2:

Og tilføj den nye forbindelse i din apt/etc/local.xml efter ( "/default_setup> " afsluttende tag )

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

- Trin 3:

Kopiér filen fra " app/code/core/Mage/Core/Model/Resource.php " ==TIL ==> " app/code/local/Mage/Core/Model/Resource.php "

1- Find beskyttede $_mappedTableNames;

2- Tilføj denne metode nedenfor :

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- Rediger metoden "public function getConnection($name)" til at se ud som nedenfor:

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

Dette giver dig mulighed for at bruge så mange som databaser, du angiver i XML- og PHP-KODE for core_read-forbindelse og default_setup-forbindelsen for alle andre forbindelser i magento (core_write, core_setup)

Håber dette løser dit problem.



  1. Sådan omdirigeres til en anden side efter brugertype i php og mysql

  2. Hvad er det bedste PostgreSQL High Availability Framework? PAF vs. repmgr vs. Patroni Infographic

  3. Sådan installeres MariaDB 10 på Debian og Ubuntu

  4. Kan ikke oprette forbindelse til postgres ved hjælp af jdbc i pyspark shell