1. 導出資料
前提條件
- 需要擁有資料庫的讀權限。
- 如果使用遠端轉儲,遠端GaussDB伺服器必須允許用戶端遠端連接配接。
- 需要對放置導出資料的目錄具有寫權限。
背景原理
- gs_dump導出資料的原理是使用SQL查詢擷取資料定義并重新組成SQL語句。如果使用者在運作gs_dump時遇到問題,請确認是否具有從資料庫中查詢相關資訊的權限。
- 在運作gs_dump的時候,應該檢查輸出中是否有任何警告存在(列印在标準錯誤上的警告資訊),特别是根據(控制輸出的内容和格式的參數)所列選項輸出警告。
- 在運作gs_dump的時候,應該盡量減少對資料庫的操作,如頻繁的DROP表操作可能會引起加鎖失敗的問題。如果遇到此類問題,請重新進行備份。
導出示例
以在GaussDB伺服器上導出資料為例進行說明,如果是導出遠端伺服器,需要指定-h等參數。以gaussdba使用者身份登入GaussDB伺服器。以伺服器端口号5432為例,請根據實際情況進行修改。
場景 | 導出指令 |
将mydb資料庫導出到一個腳本檔案。 | gs_dump mydb -Fp -f dump.sql |
将mydb資料庫導出到一個目錄中。 | gs_dump mydb -Fd -f dumpdir 說明: 對大型資料庫的導出,建議使用并行化的目錄格式,如下所示: gs_dump mydb -Fd -f parallelDump -W passwd |
隻導出資料定義。 | gs_dump mydb -s -f dumpSchema.sql |
隻導出資料。 | gs_dump mydb -a -f dumpData.sql |
導出特定的表inctable。 | gs_dump mydb -t inctable -f dumpTable.sql |
不導出特定的表exctable。 | gs_dump mydb -T exctable -f dumpTable.sql |
加密導出。 | gs_dump mydb -f dumpEncryption.sql --with-encryption=AES128 --with-key=KEY |
恢複前删除已存在的恢複對象。 | gs_dump mydb -c -f dumpClean.sql |
2. 導入資料
GaussDB的用戶端工具gsql可以讀取由gs_dump生成的備份檔案,将備份的資料庫恢複到指定的資料庫中。
前提條件
- 已經使用gs_dump進行了資料庫轉儲并生成了轉儲檔案(假設為outfile)。
- 所有與轉儲資料庫相關的使用者在目标資料庫中都已經存在。
背景原理
-
預設情況下,恢複在遇到錯誤時仍然繼續執行。增加如下參數可以保證在恢複過程中發生錯誤時停止恢複操作:
gsql --set ON_ERROR_STOP=on dbname < outfile
但是,此方法在發生錯誤時都隻能得到部分恢複了的資料庫(恢複了一半)。是以,您可以将整個恢複過程當成一個單獨的事務,這樣就能夠保證成功則全部恢複,失敗則全部復原。可以通過向恢複工具傳遞 -1或 --single-transaction指令行參數達到此目的。
注意: 導入使用 -1參數時,即時一個很微小的錯誤也會導緻已經運作了好幾個小時的恢複過程復原;gsql支援AES解密導入,以-k參數指定解密密鑰。
操作
以gaussdba使用者身份登入GaussDB伺服器。使用gs_dump生成的檔案(outfile)恢複資料庫。
恢複場景 | 操作步驟 |
恢複本機資料庫。 假設A資料庫損壞,利用以前備份的SQL轉儲檔案(outfile)進行恢複。 | 1.連接配接到預設資料庫postgres。 gsql -d postgres 2.删除損壞的資料庫A,并使用模闆資料庫重新建立一個幹淨的資料庫。 DROP DATABASE A; CREATE DATABASE A TEMPLATE template0; 注意: 如果不删除舊資料庫,則新導入的資料可能與原資料庫中的資料相沖突。 3.恢複到資料庫A。 gsql A < oufile |
利用 SQL 轉儲檔案(outfile)在另一台主機上重建資料庫。 假設要把主機1上的資料庫A恢複到主機2上的資料庫B中。 | 1.連接配接到主機2的預設資料庫 postgres。 gsql -d postgres 2.在主機2上建立與A資料庫相關的使用者。 說明: 相關使用者是指在 A 資料庫中擁有對象的使用者和被賦予 A 資料庫中對象權限的使用者。 3.使用模闆資料庫在主機2上建立一個幹淨的資料庫B。 CREATE DATABASE B TEMPLATE template0; 4.在主機1上執行如下指令恢複到資料庫 A 到資料庫 B 。 gs_dump -h host1 A | gsql -h host2 B 其中 host1 和 host2 請使用主機1和主機2的 IP 位址代替。 |
如果沒有錯誤資訊,則說明資料庫恢複成功。也可以連接配接到恢複後的資料庫檢視資料是否正常。
如果發現ERROR級别的錯誤資訊,請根據錯誤提示資訊排查問題。