備份、還原、系統轉移Docker中的Redmine和Postgresql資料庫

這篇有比較多東西要講,我已先講流程
1.說明要備份的架構
2.在已建立的Redmine系統上建立一些資訊(建立Redmine的方式在前一篇有說明)
3.備份系統
4.在全新的環境還原先前備份的系統

1.系統架構及備份說明
在Docker中建立了兩個Container分別為redmine和postgresql(下圖1)
Redmine是一個專案管理系統網站服務,其中系統所上傳的"檔案"都會放在redmine的資料夾中,在建立redmine的container時我們有將其資料夾與host系統的資料夾做共用連結host volume(下圖3),所以在備份redmine的時候,直接備份host的資料夾即可。
postgresql是一個資料庫伺服器服務,而資料庫檔案是置放在container中使用container volume,置放在docker服務中(要透過指令才能備份volume),資料庫存放了redmine的設定(專案資料、權限資料、使用者清單.....等)、資料(issue、item.......等設定),但不包含檔案,所以照理來說數據量應該不會大到哪裡去,在此我們直接使用Database的GUI 管理工具進行備份和還原(比較簡單易懂)

2.在已經建立好的Redmine中做一些設定,以確保我們資料可以備份和還原的說明demo
建立了一個除了admin的使用者Ryan,並設定密碼
設定系統標題名稱


上傳一個將近5M的檔案
在此我們看一下上傳檔案前後,Redmine volume所對應的host資料夾大小
第一張是上傳前的大小85.8M,第二張是上傳將近5M檔案的大小90.8M,由使證明上傳的檔案是直接存放於redmine volume中


3.備份系統
就第一節中說的分兩個部分要備份,在redmine上傳的檔案及Redmine中的資料
(1)上傳的檔案就直接把host volume資料夾壓縮備份即可,壓縮要用7Zip或RAR或傳送到壓縮檔都可以,就是壓縮起來就對了

(2)redmine中的資料是存放在資料庫中,在上一篇有講到的一套資料庫管理工具DBerver來進行資料備份(或用postgresql原生地pgadmin4也可以)
以下說明DBerver的備份說明
選擇新的連線,並選擇連線的資料庫類型,Postgresql(就是那隻大象)

然後依照資料庫的設定(docker-compose中有資訊,請參考上一篇設定)輸入連線的資訊
輸入docker主機的ip和資料庫的port
資料庫名稱、使用者帳號、密碼,輸入完成後按下確定後就完成連線,若跳出錯誤則確認連線資訊是否正確

連線完成後,會如下圖,大象圖示右下方會打勾,此時點開模式>>pubilc>>表 ,可以看到redmine系統已經自動建立資料表

在資料庫上點選右鍵>>工具>>備份,可進入備份設定畫面

把對象中的public打勾,下方的資料表應該會全部一併打勾,然後選擇下一步

選擇資料庫備份檔輸出的資料夾及名稱

完成備份後會出現下圖訊息

4.還原系統
在新的環境中,container和volume以及host volume資料夾都是空的的狀態

使用瀏覽器連線也無法出現網頁,此時代表所有的數據都是不存在的

參考上一篇,將docker-compose.yml建立,此時會把redmine和postgresql的container建立起來。
我們將redmine的container 停止,postgresql的container繼續讓他運行

解壓縮剛剛備份壓縮的redmine host資料夾

此時,用備份時的連線方式進入資料庫中檢視資料表,此時資料表列表都是空的,因為我們剛建立的redmine把上就停用,所以redmine還來不及建立資料表(沒差,因為我們要還原資料庫,還原時也會砍掉既有的資料表)

在資料庫上按右鍵>>選工具>>恢復
 在恢復設置中選擇我們剛剛備份的資料庫檔案,還有記得選擇重建前清除數據庫對象(也就是把原有資料庫的資料刪掉再還原)
 還原完成後的畫面如下

完成資料庫還原及host資料夾後,啟用redmine的container

完成

下面來確認是否資料都正確還原
網站的標題為我們備份前的狀態
 可以使用我們建立的使用者登入,且上傳的檔案紀錄也存在

接下來下載先前上傳的檔案,成功完成下載

以上為備份還原的說明






留言

這個網誌中的熱門文章

[Excel]將圖片放置於儲存格中

[軟體]AUTOCAD關於開啟圖面時,字型找不到,而要手動指定成 chineset.shx 字型檔問題

[MS SQL]查詢資料庫中每個資料表之列數與資料表大小(容量)資訊。Get size of all tables in database