【问题标题】:Need help writing to multiple database through single Magento installation需要帮助通过单个 Magento 安装写入多个数据库
【发布时间】:2013-02-08 14:48:45
【问题描述】:

我是 Magento 的新手(我很喜欢它),我正在开发一个桌面应用程序以与我们的 Magento CE 1.7 商店并行运行。桌面应用程序将拥有自己的数据库,但我们需要从 magento 获取几乎所有信息。

所以,我已经复制了magento的整个数据库并在应用程序的数据库中使用它。当通过 magento 的站点在 magento 的数据库中写入某些内容时,我也需要在应用程序的数据库中写入。我们不需要从应用程序的数据库中读取,只需要写入。

我需要在哪里进行哪些更改?如果有人可以为我提供一些深入的指导,我将不胜感激。请帮帮我。

谢谢。

【问题讨论】:

  • 为什么要复制数据库? Magento 有一个出色的 API,您可以将应用程序连接到该 API。

标签: mysql database magento magento-1.7


【解决方案1】:

Magento 能否原生处理只读从属设备

Magento 是本机能够分离对不同数据库服务器的读/写(除了一些损坏的版本,例如 EE 1.11) - 允许您将select 负载偏移到一个额外(或更多)服务器;并将所有update/write 查询转发给一个主服务器。

配置从站

首先配置你的奴隶。我们是 Percona 实用程序和 MySQL 分支的大力倡导者 - 它们有一个理想的工具来对现有数据库进行 热 备份 - innobackupex。 here 写得很好。

在主人身上

替换 $TIMESTAMP 或 tab 完成。

mysql
> GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'$slaveip' IDENTIFIED BY '$slavepass';
> quit;
innobackupex --user=username --password=password /path/to/backupdir
innobackupex --user=username --password=password /
       --apply-log /path/to/backupdir/$TIMESTAMP/

rsync -avprP -e ssh /path/to/backupdir/$TIMESTAMP TheSlave:/path/to/mysql/
scp /etc/mysql/my.cnf TheSlave:/etc/mysql/my.cnf

在奴隶上

/etc/init.d/mysql stop
mv /path/to/mysql/datadir /path/to/mysql/datadir_bak
mv /path/to/mysql/$TIMESTAMP /path/to/mysql/datadir
chown -R mysql:mysql /path/to/mysql/datadir
sed -i 's#server-id=1#server-id=2#g' /etc/mysql/my.cnf
/etc/init.d/mysql start
cat /var/lib/mysql/xtrabackup_binlog_info
> TheMaster-bin.000001     481

mysql
> CHANGE MASTER TO MASTER_HOST='$masterip', MASTER_USER='repl', MASTER_PASSWORD='$slavepass', MASTER_LOG_FILE='TheMaster-bin.000001', MASTER_LOG_POS=481;
> START SLAVE;

然后,一旦您的从站开始运行,实际上,只需要几行额外的代码即可实现。

在./app/etc/local.xml

<default_read>
  <connection>
    <use/>
    <host><![CDATA[host]]></host>
    <username><![CDATA[username]]></username>
    <password><![CDATA[password]]></password>
    <dbname><![CDATA[dbname]]></dbname>
    <type>pdo_mysql</type>
    <model>mysql4</model>
    <initStatements>SET NAMES utf8</initStatements>
    <active>1</active>
  </connection>
</default_read>

来源

【讨论】:

    【解决方案2】:

    要处理多个数据库,您应该执行以下操作:

    1°) 在 /app/etc/local.xml 中创建数据库连接:

    你有类似的东西:

            <default_setup>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[user]]></username>
                    <password><![CDATA[password]]></password>
                    <dbname><![CDATA[dbname]]></dbname>
                    <active>1</active>
                </connection>
            </default_setup>
    

    处理你的 mysql 数据库。在此处添加另一个节点来处理新的连接

     <mysetup>
    <connection>
    <host>192.168.5.10</host> <!-- host of my local server -->
    
    <username>user</username>
    <password>passwd</password>
    <dbname>d:\pathtomydb\bin\dbname.FDB</dbname>
    <active>1</active>
       </connection>
       </mysetup>
    

    现在你有了另一个连接。

    我的是火鸟,所以您可以对此进行一些更改,但这是我的处理方式:

    连接:

     $config = Mage::getConfig()->getResourceConnectionConfig('mysetup');
    
            $dbConfig = array(
            'host'      => $config->host,
            'username'  => $config->username,
            'password'  => $config->password,
            'dbname'    => $config->dbname
        );
            $connexion = Zend_Db::factory('Firebird', $dbConfig);
    

    将 Firebird 替换为您需要的连接类型(如 Pdo_Mysql 或类似的东西)。 查询:

     $connexion->fetchAll($request);
     $connexion->update('table',array('field'=>'value'),$where);
    

    等等

    【讨论】:

    • 感谢您的精彩回答。我有一个问题希望你能及时得到。我得到了一些我想从另一台服务器读取的 cron 和报告。这更像是奴隶到主人。但是我们只对所有查询使用master。如果我设置正确的连接,我是否可以在不进行大量代码更改的情况下运行 crons 和报告?例如喜欢无缝使用 Magento ORM 吗?感谢您的帮助。
    【解决方案3】:

    如果您的 DNS 支持,您可以使用加权路由策略创建记录集。就像 AWS Route 53。为了避免停机,您可以将其与运行状况检查相关联。

    一个例子:https://aws.amazon.com/pt/blogs/aws/domain-name-health-checks-for-route-53/

    【讨论】:

      猜你喜欢
      • 2021-04-06
      • 1970-01-01
      • 2021-12-15
      • 2011-08-25
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多