資料庫 dump & restore 攻略(PostgreSQL 為例)

Noel.H
5 min readSep 5, 2021

--

Rails 專案如何將遠端資料庫備份到本機與還原?

這篇會告訴你

  • 遠端資料庫要如何 dump 到本機上
  • dump 之後要如何 restore

這篇不會告訴你

  • dump 的所有 option 項目

環境

  • MacBook Pro 15
  • Intel Core i5

那我們開始吧🤗

因為公司專案的資料庫放在遠端,對於新人來說要練習的時候都會深怕動到資料庫內的東西,這種時候除了恢復 git 版本外,我們還有一個選擇,那就是 dump 一份到自己的本機上,這樣想怎麼改都不怕啦!!

除此之外,還有一個情境是,以防資料數據出現意料外的狀況,開發人員也可以一段時間 dump 一份以備日後突發狀況。

根據官網的說明,會發現其實操作的指令很簡單,

但...人生中就是最痛恨這個 but !!!!!
為什麼明明照著官網操作卻一直碰壁呢?

在跟著操作前,請確保你的專案內沒有任何剛 dump 後而產生的新檔案,
讓我們完完全全從頭來過一遍吧!!!🏌️‍♀️

第一步:備份遠端資料庫

$ pg_dump -U user_name -h host_name -x -Fc dbname > outfilee.g. pg_dump -U google_user_dev -h 33.111.222.555 -x -Fc google-dev > ggg.sql

-U : 連接的用戶名,一般是遠端資料庫的使用者名稱
-h : 運行遠端資料庫的主機,
-x : 防止訪問權限,白話一點就是允許任何人 dump
-Fc : 選擇輸出為自定義的格式,像範例這裡我們指定輸出為 .sql 格式,若不指定則預設為純文字檔
> : 箭頭左邊為想要備份哪個 db,箭頭右邊為備份後的檔名及格式

接著會讓你輸入密碼,這邊切記是輸入遠端資料庫的密碼哦 ❗❗

第二步:查看專案內是否有多出 .sql 檔案

還不熟悉如何 dump 時候,指令輸入完後不曉得該如何確保備份的內容對不對,還曾經 dump 出大小為 0 bytes 的檔案,真的是...😅
最好每次操作完指令後就看一下專案內有沒有多一個你剛取好的備份檔名,可以去看看檔案裡面寫什麼跟檔案大小來判斷自己有沒有備份正確,不正確的就刪掉。

正確備份後的檔案內容會記錄了所有你對資料庫做過的事情,包含有哪些資料表、哪些欄位、類型等,都可以大致看到。

第三步:創建本地端資料庫

進入 config/database.yml 把遠端資料庫註解掉,若有相應的環境變數也要同時註解掉唷!然後輸入以下指令確認:

$ rails db:migrate:status 
由於本地端尚未建立資料庫,而它預設會去找與專案名稱相符的資料庫,因此噴錯

創建本地資料庫

$ rails db:create

第四步:執行 migration

確保資料庫連的是本地端創建的

在 restore 資料庫前我們需要有一樣的資料表跟欄位:

$ rails db:migrate

執行後可以用 rails db:migrate:status確認 database 和 migrate 狀態。

第五步:最後一哩路 restore

$ pg_restore -O -c -d local_database < dumped_filenamee.g. pg_restore -O -c -d demo2_development < ggg.sql

-O : no owner,也就是允許任何使用者
-c : clean,在重新創建前清理資料庫物件
-d : dbname,要連接的資料庫名稱,我們的案例也就是本地資料庫
< : 箭頭右邊表示從哪個檔案 restore

然後就可以進入 rails c 環境或資料庫 GUI 工具看有沒有資料,
成功還原資料庫內容後,就可以把 dump 的檔案刪掉囉🌞

我是 Noel,謝謝你看完這篇文章,希望你喜歡 🖐

--

--

Noel.H
Noel.H

Written by Noel.H

喜歡騎車穿梭在大街小巷 🏍

No responses yet

Write a response