magento:生产,登台和数据库之间的数据库同步发展

时间:2012-01-27 21:12:10

标签: database magento synchronization production

我今天一直在阅读Magento中的数据库同步。

我目前正在努力解决的一件事是在开发期间和上传到生产期间需要同步的内容。现在假设一批更改将包括对数据库和代码的更改,下面是我对模型工作流程的理解(我目前不使用' stage '服务器,因此绕过了这个例子):

  1. 生产数据库
  2. 同步 dev 数据库
  3. 将代码的工作副本签出到开发者
  4. dev 服务器
  5. 上进行更改并对其进行测试
  6. 接受更改并将其提交到svn repository
  7. 触摸生产服务器上的Maintenance.flag并准备升级(这完全消除了与即将更改的实时数据交互的用户的同步问题?)
  8. 将分支合并到主干并将存储库部署到生产服务器
  9. dev 数据库同步回生产数据库并测试更改
  10. 所以#1& 7与Magento合作时,我并不完全明白:

    • 什么需要同步,什么不需要?
      • 将订单和客户信息同步给我似乎很荒谬,所以我不会这样做。
      • 我希望产品架构和数据显然是同步的,任何管理员更改,模块更改等等。如何处理?
    • 怎么样同步? (MySql转储,导入/导出等)
      • 目前我正在使用具有结构和数据同步功能的Navicat 10 Premium(我还没有进行过实验,但它们看起来像是一个巨大的帮助)

    所以我不一定需要具体细节(但他们会帮助)。或多或少我想知道什么对你有用,你对这个系统有多高兴。

2 个答案:

答案 0 :(得分:5)

如果您使用的是CE版本:

  • 沟渠s​​vn并使用GIT :)
  • 永远不要同步数据库,准备数据库升级作为扩展升级文件

    1. 有3个站点dev,stage,live
    2. 将实时数据库复制到舞台,并在需要时将其复制到
    3. 从现场进行所有管理员更改,只需将整个数据库复制到行

这样您就不必同步数据库+如果您通过扩展升级脚本进行所有配置更改,您可以将您的magento冷启动到新的数据库结构,而不会丢失数据结构

答案 1 :(得分:2)

我使用phpunit构建一个dev db。我写了一个short script,它从实时数据库转储xml数据,我逐个表地使用它,修改任何敏感的东西并删除我不需要的东西。我的dev数据库的架构永远不会改变,永远不会重建。只有数据被删除并重新创建每个phpunit运行。

对于每个人来说可能不是一个合适的解决方案,因为它永远不会对开发/制作同步,但我不需要这样做。

主要的好处是我需要为dev db提供多少数据。它大约有12000行xml,并且可以处理30个不同的表。一些小核心表仍然存在,因为我没有写入它们,并且许多表都是空的,因为我不使用它们。

数据库是一个代表性的样本,非常小。小到足以编辑为文本文件,每次运行测试时只需几秒钟就可以填充。

以下是每个PHPUnit测试顶部的内容。有PHPUnitDbUnit

的良好文档
<?php
require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'top.php';
require_once "PHPUnit/Extensions/Database/TestCase.php";

class SomeTest extends PHPUnit_Extensions_Database_TestCase 
{
    /**
     * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
     */
    public function getConnection() {
        $database = MY_DB
        $hostname = MY_HOST
        $user     = MY_USER
        $password = MY_PASS
        $pdo      = new PDO("mysql:host=$hostname;dbname=$database", $user, $password);
        return $this->createDefaultDBConnection($pdo, $database);
    }

   /**
    * @return PHPUnit_Extensions_Database_DataSet_IDataSet
    */
    public function getDataSet() {
    return $this->createXMLDataSet(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'Tests/_files/seed.xml');
    }
}

因此,现在您只需要一个DbUnit读取的种子文件,以便在每次调用单元测试时重新填充数据库。

首先复制整个数据库两次。一个将是您的开发数据库,​​第二个将是您的“原始”数据库,您可以使用它来转储xml数据,以防您遇到关键问题。

然后,在“prisine”数据库中使用类似我的xml dumper之类的内容来获取xml转储并开始构建种子文件。

generate_flat_xml.php -tcatalog_product_entity -centity_id,entity_type_id,attribute_set_id,type_id,sku,has_options,required_options -oentity_id >> my_seed_file.xml

编辑种子文件以仅使用您需要的内容。 dev db的小尺寸意味着您只需查看数据库与文本文件中的内容即可检查差异。更不用说数据更少的速度要快得多。