2012-01-27 115 views
4

今天我一直在閱讀關於Magento中的數據庫同步。magento:生產,分期和開發之間的數據庫同步

我目前正在努力的一件事是在開發過程中和上傳到生產過程中需要同步的內容。現在假設一批更改將包含對數據庫和代碼的更改,下面是我對模型工作流程的理解(我目前不使用'階段'服務器,因此在此示例中繞過了這一點):

  1. 同步開發 DB從生產 DB
  2. 結帳工作的代碼拷貝到開發機
  3. 進行更改,然後測試它們對開發服務器
  4. 接受更改並將其提交到svn庫
  5. 觸摸Maintenance.flag生產服務器上,並進行升級準備(這完全消除了用戶與即將改變右實時數據交互同步問題?)
  6. 合併分支幹路和部署存儲庫到生產服務器
  7. 同步開發 DB回生產 DB和測試改變

所以將項目#1 & 7我在使用Magento時並不完全瞭解:

  • 什麼需要同步,哪些不需要?
    • 將訂單和客戶信息同步到我這似乎很荒謬,所以我不會這樣做。
    • 我希望產品模式和數據通過顯然同步,以及任何管理更改,模塊更改等。如何處理?
  • 如何同步? (MySQL的轉儲,進口/出口等)
    • 目前我使用的Navicat 10溢價具有結構和數據同步功能(我還沒有嘗試,但他們看起來像一個巨大的幫助)

所以我不一定需要在這裏具體(但他們會幫助)。或多或少,我想知道什麼對你有用,以及你對這個系統有多開心。

回答

2

我使用phpunit來建立一個開發數據庫。我寫了一個short script,它從實時數據庫轉儲xml數據,我使用它逐個表,將任何敏感內容刪除,並刪除我不需要的內容。我的開發數據庫架構從不改變,永遠不會重建。只有數據被丟棄並重新創建每個phpunit運行。

對於每個人來說可能都不是合適的解決方案,因爲它不會將dev同步到stage/production,但我不需要那麼做。

主要好處是我需要的dev數據的數據量很小。它大約有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自卸車的東西來獲取您的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 

編輯種子文件以僅使用你需要的。開發數據庫的小尺寸意味着您可以通過查看數據庫與文本文件中的內容來檢查差異。更不用說數據更少,速度更快。

+0

我很好奇這種方法,因爲我同意你的說法,開發數據庫並不需要大量的數據用...測試。主要是產品,設置等。我從來沒有聽說過phpUnit,直到這篇文章。我很好奇,如果你不介意的話,可以更多地瞭解你是如何完成這種情況的。我只想保持這種簡單而又易於管理的方式,特別是因爲我是版本控制和處理這種規模的網站的全新功能。 – 2012-02-01 14:44:29

+0

太棒了,我非常感謝所有的幫助。在我結束幾件事情並且有時間留出餘暇之後,我會在接下來的幾天內對此做出迴應。 – 2012-02-02 16:43:02

5

如果您使用的則CE版本:

  • 溝SVN和使用GIT :)
  • 從未同步數據庫,準備數據庫升級,擴展升級文件

    1. 有3個網站開發,舞臺,生活
    2. 實時數據庫被複制到階段和dev需要時
    3. ma柯從現場所有的管理變化,只是整個數據庫拷貝下了線

這樣,你永遠不會有同步數據庫+如果你通過擴展名的所有配置的變化升級腳本,你可以冷啓動您的magento到一個新的數據庫結構,無論你想不丟失數據結構

+1

使用Git的+1。通過使用進行數據修改的腳本將實時數據庫複製到stage/dev中,例如更改核心URL條目,存儲第三方支付接口的電子郵件地址和授權信息。匿名/更改客戶和訂單數據。 – 2012-01-28 20:12:33

+0

我個人使用結構腳本來處理這個問題,是的,因爲Matthias解釋了一些sql更新腳本也需要確保環境之間的連續流暢的流動。 – 2012-01-30 07:50:51

+0

嘿,如果你希望我溝SVN至少告訴我爲什麼:)。如果你們中的一個能夠給我看一個劇本或一個樣本,或者指引我朝着正確的方向發起一個非常感激的活動。 – 2012-02-01 14:47:01

相關問題