0

情況:我正在開發一個大型啓動web項目,該項目經常投入生產,因此所有開發都非常快。我們有幾個環境 - 開發(本地),質量保證,舞臺和生產與當然數據庫中的不同數據(我們使用postgres)。我的日常工作是,在我開發一些新功能的同時,一些質量保證人員可以在其中一個環境中發現重要的錯誤,所以我必須修復它,或者至少看看有什麼不對。在Docker容器中的數據庫轉儲之間切換的方式

問題:從本地上下文切換到生產/ qa/stage,我通常在本地從這些環境中轉儲數據庫,然後執行調試。問題是,起初轉儲非常繁重,有時需要30分鐘才能下載並應用它,其次 - 當我將它轉儲到本地數據庫時,我放棄了本地的開發環境。

願望:能夠切換上下文本地快速

:讓我們說我們有搬運工人容器的Web服務器,這是該樣品中鏈接到Postgres的集裝箱像docker-compose.yml文件

version: '3' 

services: 
    pg: 
    image: "mdillon/postgis" 
    hostname: pghost 
    ports: 
      - "5433:5432" 
    volumes: 
      - "~/pgdata:/var/lib/postgresql/data" 
    ... 
    webserver: 
    image: "some_app_image" 
    links: 
      - pg:postgres 
    ... 

而且讓我們假裝這個網絡服務器真的很重,因此使用多個運行容器在內存使用和可讀性方面會是一個大問題。

問題:是否有任何優雅(或不)的方式來在不同的數據庫數據集之間進行快速切換?可能有不同的pgdata文件夾,或以某種方式鏈接幾個postgres容器(雖然我不知道它是可能的)

+0

我假設你使用'pg'來訪問Web服務器上的數據庫。你不能把它指向數據庫遠程IP嗎? – eLRuLL

+0

@eLRuLL是的,我正在使用pg訪問。據我所知,你的意思是指向真正的數據庫?我無法做到這一點,因爲它是一個生產數據..我需要改變它來檢查是什麼問題。在配置中儘可能以最少的改變切換數據是理想的 – lub0v

回答

1

它永遠不會,因爲事實是備份,下載和恢復大型數據庫需要時間。所有你可以真正控制的優化是如何經常你必須做這三件事情中的任何一件。您的選擇歸結爲使用諸如RDS或Google Cloud SQL之類的服務,它可以讓您按需將數據庫備份和恢復到雲端,並完全消除下載;或自動執行備份生成,下載(使用編排系統,您可以「下載」到主機服務器並創建一個新的數據庫容器,通過一個腳本來恢復備份,這比通過線路發送備份要快得多),還原進程並在計時器上運行它們以設置可用於測試的安全沙箱數據庫。後者從實時延遲意味着,如果全新數據顯示缺陷,您仍然需要等待更新沙箱,但它仍然值得。

相關問題