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:

    そして、( "/ default_setup> "終了タグ)

    の後に、apt / etc/local.xmlに新しい接続を追加します。
    <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-メソッド「publicfunctiongetConnection($ 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 !!
    }
    

    これにより、core_read接続にはXMLおよびPHP CODEで指定したデータベースをいくつでも使用でき、magentoの他のすべての接続にはdefault_setup接続を使用できます(core_write、core_setup)

    これで問題が解決することを願っています。



    1. csvファイルをmysqlのコンピューターにエクスポートするにはどうすればよいですか?

    2. Oracleで数値データを含まない行を検索する

    3. 同じステートメントで挿入のIDを取得します

    4. Neo4j-Cypherを使用して関係を作成する