資料來源:布拉格的春天 – Frey 的網路誌 IV – 如何備份/還原 Synology Video Station 中的資料


從舊的 Synology NAS 轉換成新的 Synology NAS 使用時,除非是硬碟一對一抽換,不然都會遇上得要從舊的 NAS 中把 Video Station 的資訊備份出來、再還原到新的 NAS 的問題,如果自己的影音視聽檔案收藏有很多的時候,這個問題更加重要,但是問題是,一直沒有什麼方便的工具可以使用,甚至連清楚的官方參考文件都欠缺,這其實十分不便。

此所指的資訊,並不是那些影音檔案,例如 MP4、MKV、之類的。
而是指那些在 Video Station 上頭經由系統搜尋、索引、使用者人工修改之後所呈現的電影與影片資訊, 這些資料被儲存在 Video Station 所使用的 PostgreSQL 資料庫中, 如果有許多收藏的時候, 這一類的資訊就會相當多。因為自動化的影片資訊搜尋並不是能百分之百的在網路上找到所有影片、影集或電影的資訊, 所以 Video Station 的使用者多多少少都會有一些要經由人工增刪的資訊來加強資料庫, 這些資訊, 例如中文化的電影資訊、影片封面檔案、年份等等, 其實都是非常需要加以備份保留、並且在換機時再來還原的, 可以省下使用者很多的時間。

所以, 以下就是如何以一個外接的 USB 硬碟來備份/還原 Synology 中 Video Station 資料庫的說明, 在此之前, 務必一定要先把所有的影音檔案還原到新的 NAS 資料夾中:

此外,Synology 的 SSH 登入 root 權限,可以方便接著指令的處理:
1. 使用 ssh [nas admin 帳號]@[nasIP] ,主機會回應輸入 password。
2. 由 [nas admin 帳號] 在提升為 root 權限,輸入指令 sudo -i ,輸入後帳號就會切換為 root 。


1-來源 VideoStation 的資料庫備份出來

1. 從來源 NAS 的 控制台 -> “終端機 & SNMP”功能中, 打開 SSH功能

2. 打開 Putty 連上來源 NAS, 輸入以下指令:

3. USB 外接硬碟的正確路徑名稱可以在 File Station 中查到,見下圖中的 所在位置 一欄所顯示的資料即是 /volumeUSB1/usbshare1-2/,所以輸入的指令會是這樣:

synology VideoStation 資料庫轉移[備份:還原]_01
synology VideoStation 資料庫轉移[備份:還原]_03

4. 確認在 USB 外接硬碟中產生了videostation.dump 這一個檔案, 大小約為數百 MB.
synology VideoStation 資料庫轉移[備份:還原]_02

5. 從來源 NAS 中退出 USB 外接硬碟, 將USB 外接硬碟接到目標 NAS.

6. 關閉來源 NAS 的 SSH 功能


2- VideoStation 還原到新主機

7. 從目標 NAS 的控制台 -> “終端機 & SNMP”功能中, 打開 SSH功能

8. 從目標 NAS 的套件中心 -> Video Station -> 停止 Video Station

9. 打開 Putty 連上目標 NAS, 輸入以下指令:

10. 略等一會, 一直到終端機中的遊標重新出現為止 (可能要好一陣子, 而且一定會有一些錯誤訊息, 這些無妨…)
synology VideoStation 資料庫轉移[備份:還原]_04

11. 從目標 NAS 的套件中心 -> Video Station -> 啟動 Video Station

12. 檢查 Video Station 中的資料是否正確, 如果不正確或是並沒有還原回來的話, 請重複以上的步驟 8 – 11

13. 無誤之後, 可以關閉目標 NAS 的 SSH 功能


3-其他

Linux pg_dump 指令說明

pg_dump 將一個PostgreSQL數據庫抽出到一個腳本文件或者其它歸檔文件中

用法:

描述:
pg_dump 是一個用於備份 PostgreSQL 數據庫的工具。它甚至可以在數據庫正在並發使用的時候進行完整一致的備份。 pg_dump 並不阻塞其它用戶對數據庫的訪問(讀或者寫)。
轉儲格式可以是一個腳本或者歸檔文件。 腳本轉儲的格式是純文本,它包含許多 SQL 命令, 這些 SQL 命令可以用於重建該數據庫並將之恢復到保存成腳本的時候的狀態。 要從這樣的腳本中恢復,使用 psql。
它們甚至可以用於在其它機器甚至是其它硬件體系的機器上重建該數據庫, 通過對腳本進行一些修改,甚至可以在其它 SQL 數據庫產品上重建該數據庫。
另外,還有候選的歸檔文件格式必須和 pg_restore 一起使用重建數據庫。 它們允許 pg_restore 對恢復什麼東西進行選擇, 或者甚至是在恢復之前對需要恢復的條目進行重新排序。 歸檔文件也是設計成可以跨平台移植的。
如果一種候選文件格式和 pg_restore 結合,那麼pg_dump就能提供一種靈活的歸檔和傳輸機制。 pg_dump 可以用於備份整個數據庫, 然後就可以使用 pg_restore 檢查這個歸檔和/或選擇要恢復的數據庫部分。 最靈活等輸出文件格式是”custom(客戶化)”格式(-Fc)。 它允許對歸檔元素進行選取和重新排列, 並且缺省時是壓縮的。 tar 格式(-Ft)不是壓縮的並且我們在裝載等時候不可能重排列, 不過它也很靈活;還有,它可以用標準 Unix 工具,比如 tar 處理。

在運行 pg_dump 的時候,我們應該檢查輸出, 看看是否有任何警告存在(在標準錯誤上打印),特別是下面列出的限制。

參數:
dbname
聲明將要轉儲的數據庫名。 如果沒有聲明這個參數,那麼使用環境變量 PGDATABASE。 如果那個環境變量也沒聲明,那麼用發起連接的用戶名。

-a
--data-only
只輸出數據,不輸出模式(數據定義)。
這個選項只是對純文本格式有意義。對于歸檔格式,你可以在調用 pg_restore 的時候聲明選項。

-c
--clean
輸出在創建數據庫創建命令之前先清理(刪除)該數據庫對象的命令。
這個選項只是對純文本格式有意義。對于歸檔格式,你可以在調用 pg_restore 的時候聲明選項。

-C
--create
以一條創建該數據庫本身並且與這個數據庫聯接等命令開頭進行輸出。 (如果是這種形式的腳本,那麼你在運行腳本之前和哪個數據庫聯接就不重要了。)
這個選項只對純文本格式有意義。對于歸檔格式,你可以在調用 pg_restore 的時候聲明該選項。

-d
--inserts
將數據輸出為的INSERT命令(而不是 COPY)。 這樣會導致恢復非常緩慢。 這個選項主要用於製作那種可以用於其它非 PostgreSQL 數據庫的轉儲。 請注意,如果你重新排列了字段順序,那麼恢復可能會完全失敗。 -D 更安全,但是也更慢。

-D
--column-inserts
--attribute-inserts
把數據轉儲為帶有明確字段名的 INSERT 命令。 (INSERT INTO table(column, …) VALUES …)。 這樣會導致恢復非常緩慢,它主要用於製作那種可以用於其它非 PostgreSQL 數據庫的轉儲。

-f file
--file=file
把輸出發往指定的文件。如果忽略這些,則使用標準輸出。

-F format
--format=format
選擇輸出的格式。format可以是下列之一:
p 輸出純文本SQL腳本文件(缺省)
t 輸出適合輸入到 pg_restore 裡的tar歸檔文件。 使用這個歸檔允許在恢複數據庫時重新排序和/或把數據庫對象排除在外。 同時也可能可以在恢復的時候限制對哪些數據進行恢復。
c 輸出適於給 pg_restore 用的客戶化歸檔。 這是最靈活的格式,它允許對裝載的數據和對象定義進行重新排列。 這個格式缺省的時候是壓縮的。

-i
--ignore-version
忽略在 pg_dump 和數據庫服務器之間的版本差別。
pg_dump 可以處理來自以前版本的PostgreSQL 的數據庫,但是太老的版本則不被支持了(目前是支持到 7.0)。 如果你需要跨越版本檢查時才使用這個選項( 而且如 pg_dump 失效,別說我沒警告你)。

-n schema
--schema=schema
只轉儲 schema 的內容。 如果沒有聲明這個選項,所有目標數據庫中的非系統模式都會被轉儲出來。
注意: 在這個模式裡,pg_dump 並不試圖轉儲任何其它選定模式可能依賴的數據庫對象。 因此,系統不保證單一的一個模式的轉儲就可以成功地恢復到一個乾淨的數據庫中去。

-o
--oids
作為數據的一部分,為每個表都輸出對象標識(OID)。 如果你的應用在某種程度上引用了OID字段的話,(比如,在外鍵約束中用到)。 那麼使用這個選項。否則,不應該使用這個選項。

-O
--no-owner
不把對象的所有權設置為對應源數據庫。 通常, pg_dump 發出(psql特有的) ALTER OWNER 或者 SET SESSION AUTHORIZATION 語句以設置創建的數據庫對象的所有權。 又見 -R 和 -X use-set-session-authorization 選項。 請注意 -O 並不防止所有對數據庫的重新聯接, 只是防止那些為調整權限進行的排它聯接。
這個選項只是對純文本格式有意義。對于歸檔格式,在你調用 pg_restore 的時候你可以聲明該選項。

-R
--no-reconnect
這個選項已經過時,但是出於向下兼容的考慮,仍然接受這個選項。

-s
--schema-only
只輸出對象定義(模式),不輸出數據。

-S username
--superuser=username
聲明關閉觸發器時需要用到的超級用戶名。 它只有使用了 –disable-triggers 的時候才有關係。 (通常,我們最好不要輸入這個參數,而是用超級用戶啟動生成的腳本。)

-t table
--table=table
只輸出表 table的數據。 很可能是在不同模式裡面有多個同名表;如果這樣,那麼所有匹配的表都將被轉儲出來。 同時聲明 –schema 和 –table 則只選擇一個表。
注意: 在這個模式裡,pg_dump 並不試圖轉儲任何其它選定表可能依賴的數據庫對象。 因此,系統不保證單一的一個表的轉儲就可以成功地恢復到一個乾淨的數據庫中去。

-v
--verbose
聲明冗餘模式。 這樣將令 pg_dump 輸出詳細的對象評註以及轉儲文件的啟停時間和進度信息到標準輸出上。

-x
--no-privileges
--no-acl
避免輸出 ACL(賦予/撤消 命令)和表的所有者關係信息。

-X disable-dollar-quoting
--disable-dollar-quoting
這個選項關閉使用美元符包圍函數體。強制它們用 SQL 標準的字串語法的引號包圍。

-X disable-triggers
--disable-triggers
這個選項只是和創建僅有數據的轉儲相關。它告訴 pg_dump 包含在恢複數據時,臨時關閉目標表上面的觸發器的命令。 如果你在表上有參考完整性檢查或者其它觸發器,而恢複數據的時候你不想重載他們,那麼你就應該使用這個選項。
目前,為 –disable-triggers 發出的命令必須用超級用戶來做。 因此,你應該同時用 -S 聲明一個超級用戶名,或者最好是用一個超級用戶的身份來啟動這個生成的腳本。
這個選項只對純文本格式有意義。對于歸檔格式,你可以在調用 pg_restore 的時候聲明這個選項。

-X use-set-session-authorization
--use-set-session-authorization
輸出 SQL 標準 SET SESSION AUTHORIZATION 命令而不是 OWNER TO 命令。 這樣的轉儲結果更加復合標準,但是依賴轉儲中的對象的歷史,可能不能正確恢復。

-Z 0..9
--compress=0..9
聲明在那些支持壓縮的格式中使用的壓縮級別。 (目前只有客戶化格式支持壓縮)。

聯接參數
-h host
--host=host
聲明運行服務器的機器的主機名。 如果數值以斜槓開頭,則它被用做到 Unix 域套接字的路徑。 缺省是從 PGHOST 環境變量中取得的,如果設置了這個環境變量的話,否則,嘗試一個 Unix 域套接字連接。

-p port
--port=port
聲明服務器正在偵聽並等待聯接的 TCP 端口或本地 Unix 主控套接字文件句柄。 缺省時使用環境變量 PGPORT 的值(如果存在),或者是編譯時的缺省值。

-U username
以給出用戶身份聯接。

-W
強制口令提示。如果服務器需要口令認證,那麼這個動作應該自動發生。