Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या Magento कई MySQL दासों का उपयोग कर सकता है?

ऊपर आपकी टिप्पणियों को देखते हुए और यह मानते हुए कि आपके पास अपने डेटाबेस का सही प्रतिकृति सेटअप है।

समाधान :-

- चरण 1:

फ़ाइल में

ऐप/आदि/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- नीचे की तरह दिखने के लिए "सार्वजनिक फ़ंक्शन 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 !!
}

यह आपको कोर_रीड कनेक्शन के लिए एक्सएमएल और पीएचपी कोड में निर्दिष्ट डेटाबेस का उपयोग करने की अनुमति देगा और मैगेंटो में अन्य सभी कनेक्शनों के लिए डिफॉल्ट_सेटअप कनेक्शन ( 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. शर्त के साथ छोटा करें

  2. MySQL सर्वर डेटाबेस के साथ SQLite क्लाइंट डेटाबेस को सिंक्रोनाइज़ करना

  3. होस्ट से डॉकर कंटेनर से कनेक्ट करना

  4. आप mysql में किसी अन्य तालिका से एकाधिक फ़ील्ड कैसे अपडेट करते हैं?

  5. मैं mysqli_fetch_assoc का उपयोग करके दो बार एक ही परिणाम क्यों प्रदर्शित नहीं कर सकता?