openGauss學(xué)習(xí)筆記-149 openGauss 數(shù)據(jù)庫運維-備份與恢復(fù)-邏輯備份與恢復(fù)之gs_restore149.1 背景信息149.2 命令格式149.3 參數(shù)說明149.3.1 通用參數(shù)149.3.2 導(dǎo)入?yún)?shù)149.4 示例
openGauss學(xué)習(xí)筆記-149 openGauss 數(shù)據(jù)庫運維-備份與恢復(fù)-邏輯備份與恢復(fù)之gs_restore
149.1 背景信息
gs_restore是openGauss提供的針對gs_dump導(dǎo)出數(shù)據(jù)的導(dǎo)入工具。通過此工具可由gs_dump生成的導(dǎo)出文件進行導(dǎo)入。
gs_restore工具由操作系統(tǒng)用戶omm執(zhí)行。
主要功能包含:
-
導(dǎo)入到數(shù)據(jù)庫
如果連接參數(shù)中指定了數(shù)據(jù)庫,則數(shù)據(jù)將被導(dǎo)入到指定的數(shù)據(jù)庫中。其中,并行導(dǎo)入必須指定連接的密碼。導(dǎo)入時生成列會自動更新,并像普通列一樣保存。
-
導(dǎo)入到腳本文件
如果未指定導(dǎo)入數(shù)據(jù)庫,則創(chuàng)建包含重建數(shù)據(jù)庫所必須的SQL語句腳本并寫入到文件或者標(biāo)準(zhǔn)輸出。等效于直接使用gs_dump導(dǎo)出為純文本格式。
149.2 命令格式
gs_restore [OPTION]... FILE
[圖片上傳失敗...(image-b6677-1702084259391)]
說明:
- FILE沒有短選項或長選項。用來指定歸檔文件所處的位置。
- 作為前提條件,需輸入dbname或-l選項。不允許用戶同時輸入dbname和-l選項。
- gs_restore默認(rèn)是以追加的方式進行數(shù)據(jù)導(dǎo)入。為避免多次導(dǎo)入造成數(shù)據(jù)異常,在進行導(dǎo)入時,建議使用“-c”參數(shù),在重新創(chuàng)建數(shù)據(jù)庫對象前,清理(刪除)已存在于將要還原的數(shù)據(jù)庫中的數(shù)據(jù)庫對象。
- 日志打印無開關(guān),若需隱藏日志,請將日志重定向到日志文件。若恢復(fù)表數(shù)據(jù)時,數(shù)據(jù)量很大,會分批恢復(fù),因此會多次出現(xiàn)“表數(shù)據(jù)已完成導(dǎo)入”的日志。
149.3 參數(shù)說明
149.3.1 通用參數(shù)
-
-d, –dbname=NAME
連接數(shù)據(jù)庫dbname并直接導(dǎo)入到該數(shù)據(jù)庫中。
-
-f, –file=FILENAME
指定生成腳本的輸出文件,或使用-l時列表的輸出文件。
默認(rèn)是標(biāo)準(zhǔn)輸出。
[圖片上傳失敗...(image-337f0b-1702084259389)]
說明:
-f不能同-d一起使用。
-
-F, –format=c|d|t
指定歸檔格式。由于gs_restore會自動決定格式,因此不需要指定格式。
取值范圍:
c/custom:該歸檔形式為gs_dump的自定義格式。
d/directory:該歸檔形式是一個目錄歸檔形式。
t/tar:該歸檔形式是一個tar歸檔形式。
-
-l, –list
列出歸檔形式內(nèi)容。這一操作的輸出可用作-L選項的輸入。注意如果像-n或-t的過濾選項與-l使用,過濾選項將會限制列舉的項目(即歸檔形式內(nèi)容)。
-
-v, –verbose
指定verbose模式。
-
-V, –version
打印gs_restore版本,然后退出。
-
-?, –help
顯示gs_restore命令行參數(shù)幫助,然后退出。
149.3.2 導(dǎo)入?yún)?shù)
-
-a, –data-only
只導(dǎo)入數(shù)據(jù),不導(dǎo)入模式(數(shù)據(jù)定義)。gs_restore的導(dǎo)入是以追加方式進行的。
-
-c, –clean
在重新創(chuàng)建數(shù)據(jù)庫對象前,清理(刪除)已存在于將要還原的數(shù)據(jù)庫中的數(shù)據(jù)庫對象。
-
-C, –create
導(dǎo)入數(shù)據(jù)庫之前會先使用CREATE DATABASE創(chuàng)建數(shù)據(jù)庫。(指定該選項后,-d指定的數(shù)據(jù)庫僅用以執(zhí)行CREATE DATABASE命令,所有數(shù)據(jù)依然會導(dǎo)入到創(chuàng)建的數(shù)據(jù)庫中。)
-
-e, –exit-on-error
當(dāng)發(fā)送SQL語句到數(shù)據(jù)庫時如果出現(xiàn)錯誤,請退出。默認(rèn)狀態(tài)下會繼續(xù),且在導(dǎo)入后會顯示一系列錯誤信息。
-
-I, –index=NAME
只導(dǎo)入已列舉的index的定義。允許導(dǎo)入多個index。如果多次輸入-I index導(dǎo)入多個index。
例如:
gs_restore -h host_name -p port_number -d postgres -I Index1 -I Index2 backup/MPPDB_backup.tar
在上面這個例子中,Index1和Index2會被導(dǎo)入。
-
-j, –jobs=NUM
運行g(shù)s_restore最耗時的部分(如加載數(shù)據(jù)、創(chuàng)建index或創(chuàng)建約束)使用并發(fā)任務(wù)。該選項能大幅縮短導(dǎo)入時間,即將一個大型數(shù)據(jù)庫導(dǎo)入到某一多處理器的服務(wù)器上。
每個任務(wù)可能是一個進程或一個線程,這由操作系統(tǒng)決定。每個任務(wù)與服務(wù)器進行單獨連接。
該選項的最優(yōu)值取決于服務(wù)器的硬件設(shè)置、客戶端以及網(wǎng)絡(luò)。還包括這些因素,如CPU核數(shù)量、硬盤設(shè)置。建議是從增加服務(wù)器上的CPU核數(shù)量入手,更大的值(服務(wù)器上CPU核數(shù)量)在很多情況下也能導(dǎo)致數(shù)據(jù)文件更快的被導(dǎo)入。當(dāng)然,過高的值會由于超負(fù)荷反而導(dǎo)致性能降低。
該選項只支持自定義歸檔格式。輸入文件必須是常規(guī)文件(不能是像pipe的文件)。如果是通過腳本文件,而非直接連接數(shù)據(jù)庫服務(wù)器,該選項可忽略。而且,多任務(wù)不能與–single-transaction選項一起使用。
-
-L, –use-list=FILENAME
只導(dǎo)入列舉在list-file中的那些歸檔形式元素,導(dǎo)入順序以它們在文件中的順序為準(zhǔn)。注意如果像-n或-t的過濾選項與-L使用,它們將會進一步限制導(dǎo)入的項目。
一般情況下,list-file是通過編輯前面提到的某個-l參數(shù)的輸出創(chuàng)建的。文件行的位置可更改或直接刪除,也可使用分號(;)在行的開始注出。
-
-n, –schema=NAME
只導(dǎo)入已列舉的模式中的對象。
該選項可與-t選項一起用以導(dǎo)入某個指定的表。
多次輸入-n schemaname可以導(dǎo)入多個模式。
例如:
gs_restore -h host_name -p port_number -d postgres -n sch1 -n sch2 backup/MPPDB_backup.tar
在上面這個例子中,sch1和sch2會被導(dǎo)入。
-
-O, –no-owner
不輸出設(shè)置對象的歸屬這樣的命令,以匹配原始數(shù)據(jù)庫。默認(rèn)情況下,gs_restore會發(fā)出ALTER OWNER或SET SESSION AUTHORIZATION語句設(shè)置所創(chuàng)建的模式元素的所屬。除非是由系統(tǒng)管理員(或是擁有腳本中所有對象的同一個用戶)進行數(shù)據(jù)庫首次連接的操作,否則語句會失敗。使用-O選項,任何用戶名都可用于首次連接,且該用戶擁有所有已創(chuàng)建的對象。
-
-P, –function=NAME(args)
只導(dǎo)入已列舉的函數(shù)。請按照函數(shù)所在轉(zhuǎn)儲文件中的目錄,準(zhǔn)確拼寫函數(shù)名稱和參數(shù)。
當(dāng)-P單獨使用時,表示導(dǎo)入文件中所有'function-name(args)'函數(shù);當(dāng)-P同-n一起使用時,表示導(dǎo)入指定模式下的'function-name(args)'函數(shù);多次輸入-P,而僅指定一次-n,表示所有導(dǎo)入的函數(shù)默認(rèn)都是位于-n模式下的。
可以多次輸入-n schema-name -P 'function-name(args)'同時導(dǎo)入多個指定模式下的函數(shù)。
例如:
gs_restore -h host_name -p port_number -d postgres -n test1 -P 'Func1(integer)' -n test2 -P 'Func2(integer)' backup/MPPDB_backup.tar
在上面這個例子中,test1模式下的函數(shù)Func1(i integer)和test2模式下的函數(shù)Func2(j integer)會被一起導(dǎo)入。
-
-s, –schema-only
只導(dǎo)入模式(數(shù)據(jù)定義),不導(dǎo)入數(shù)據(jù)(表內(nèi)容)。當(dāng)前的序列值也不會導(dǎo)入。
-
-S, –sysadmin=NAME
該參數(shù)為擴展預(yù)留接口,不建議使用。
-
-t, –table=NAME
只導(dǎo)入已列舉的表定義、數(shù)據(jù)或定義和數(shù)據(jù)。該選項與-n選項同時使用時,用來指定某個模式下的表對象。-n參數(shù)不輸入時,默認(rèn)為PUBLIC模式。多次輸入-n <schemaname> -t <tablename>可以導(dǎo)入指定模式下的多個表。
例如:
導(dǎo)入PUBLIC模式下的table1
gs_restore -h host_name -p port_number -d postgres -t table1 backup/MPPDB_backup.tar
導(dǎo)入test1模式下的test1和test2模式下test2
gs_restore -h host_name -p port_number -d postgres -n test1 -t test1 -n test2 -t test2 backup/MPPDB_backup.tar
導(dǎo)入PUBLIC模式下的table1和test1 模式下test1
gs_restore -h host_name -p port_number -d postgres -n PUBLIC -t table1 -n test1 -t table1 backup/MPPDB_backup.tar
> [圖片上傳失敗...(image-d503ef-1702084259389)]
>
> **說明:**
>
> -t不支持schema_name.table_name的,指定此格式不會報錯,但不會生效。
-
-T, –trigger=NAME
該參數(shù)為擴展預(yù)留接口。
-
-x, –no-privileges/–no-acl
防止導(dǎo)入訪問權(quán)限(GRANT/REVOKE命令)。
-
-1, –single-transaction
執(zhí)行導(dǎo)入作為一個單獨事務(wù)(即把命令包圍在BEGIN/COMMIT中)。
該選項確保要么所有命令成功完成,要么沒有改變應(yīng)用。該選項意為–exit-on-error。
-
–disable-triggers
該參數(shù)為擴展預(yù)留接口,不建議使用。
-
–no-data-for-failed-tables
默認(rèn)狀態(tài)下,即使創(chuàng)建表的命令失?。ㄈ绫硪呀?jīng)存在),表數(shù)據(jù)仍會被導(dǎo)入。使用該選項,像這種表的數(shù)據(jù)會被跳過。如果目標(biāo)數(shù)據(jù)庫已包含想要的表內(nèi)容,這種行為會有幫助。
該選項只有在直接導(dǎo)入到某數(shù)據(jù)庫中時有效,不針對生成SQL腳本文件輸出。
-
–no-publications
不導(dǎo)入發(fā)布。
-
–no-security-labels
該參數(shù)為擴展預(yù)留接口,不建議使用。
-
–no-subscriptions
不導(dǎo)入訂閱。
-
–no-tablespaces
不輸出選擇表空間的命令。使用該選項,無論默認(rèn)表空間是哪個,在導(dǎo)入過程中所有對象都會被創(chuàng)建。
-
–section=SECTION
導(dǎo)入已列舉的區(qū)段(如pre-data、data或post-data)。
-
–use-set-session-authorization
該選項用來進行文本格式的備份。
輸出SET SESSION AUTHORIZATION命令,而非ALTER OWNER命令,用以決定對象歸屬。該選項使轉(zhuǎn)儲更加兼容標(biāo)準(zhǔn),但通過參考轉(zhuǎn)儲中對象的記錄,導(dǎo)入過程可能會有問題。使用SET SESSION AUTHORIZATION的轉(zhuǎn)儲要求必須是系統(tǒng)管理員,同時在導(dǎo)入前還需參考“SET SESSION AUTHORIZATION”,手工對導(dǎo)出文件的密碼進行修改驗證,只有這樣才能進行正確的導(dǎo)入操作,相比之下,ALTER OWNER對權(quán)限要求較低。
-
–pipeline
使用管道傳輸密碼,禁止在終端使用。
[圖片上傳失敗...(image-9456b1-1702084259390)]
須知:
- 如果安裝過程中有任何本地數(shù)據(jù)要添加到template1數(shù)據(jù)庫,請謹(jǐn)慎將gs_restore的輸出載入到一個真正的空數(shù)據(jù)庫中;否則可能會因為被添加對象的定義被復(fù)制,而出現(xiàn)錯誤。要創(chuàng)建一個無本地添加的空數(shù)據(jù)庫,需從template0而非template1復(fù)制,例如:
- gs_restore不能選擇性地導(dǎo)入大對象;例如只能導(dǎo)入那些指定表的對象。如果某個歸檔形式包含大對象,那所有大對象都會被導(dǎo)入或一個都不會被導(dǎo)入。如果此歸檔對象通過-L、-t或其他選項被排除,那么所有大對象一個都不會被導(dǎo)入。
[圖片上傳失敗...(image-55352b-1702084259390)]
說明:
- -d/–dbname 和 -f/–file 不能同時使用。
- -s/–schema-only 和 -a/–data-only不能同時使用。
- -c/–clean 和 -a/–data-only不能同時使用。
- 使用–single-transaction時,-j/–jobs必須為單任務(wù)。
- –role 和 –rolepassword必須一起使用。
連接參數(shù):
-
-h, –host=HOSTNAME
指定的主機名稱。如果取值是以斜線開頭,他將用作Unix域套接字的目錄。默認(rèn)值取自PGHOST環(huán)境變量;如果沒有設(shè)置,將啟動某個Unix域套接字建立連接。
該參數(shù)只針對openGauss外,對openGauss內(nèi)本機只能用127.0.0.1。
環(huán)境變量:PGHOST
-
-p, –port=PORT
指定服務(wù)器所偵聽的TCP端口或本地Unix域套接字后綴,以確保連接。默認(rèn)值設(shè)置為PGPORT環(huán)境變量。
在開啟線程池情況下,建議使用 pooler port,即偵聽端口+1。
環(huán)境變量:PGPORT
-
-U, –username=NAME
所連接的用戶名。
環(huán)境變量:PGUESR
-
-w, –no-password
不出現(xiàn)輸入密碼提示。如果服務(wù)器要求密碼認(rèn)證并且密碼沒有通過其它形式給出,則連接嘗試將會失敗。 該選項在批量工作和不存在用戶輸入密碼的腳本中很有幫助。
-
-W, –password=PASSWORD
指定用戶連接的密碼。如果主機的認(rèn)證策略是trust,則不會對系統(tǒng)管理員進行密碼驗證,即無需輸入-W參數(shù);如果沒有-W參數(shù),并且不是系統(tǒng)管理員,“gs_restore”會提示用戶輸入密碼。
-
–role=ROLENAME
指定導(dǎo)入操作使用的角色名。選擇該參數(shù),會使gs_restore連接數(shù)據(jù)庫后,發(fā)起一個SET ROLE角色名命令。當(dāng)所授權(quán)用戶(由-U指定)沒有g(shù)s_restore要求的權(quán)限時,該參數(shù)會起到作用,即切換到具備相應(yīng)權(quán)限的角色。某些安裝操作規(guī)定不允許直接以初始用戶身份登錄,而使用該參數(shù)能夠在不違反該規(guī)定的情況下完成導(dǎo)入。
-
–rolepassword=ROLEPASSWORD
指定具體角色用戶的角色密碼。
149.4 示例
特例:執(zhí)行g(shù)sql程序,使用如下選項導(dǎo)入由gs_dump/gs_dumpall生成導(dǎo)出文件夾(純文本格式)的MPPDB_backup.sql文件到postgres數(shù)據(jù)庫。
gsql -d postgres -p 15400 -W Bigdata@123 -f /home/omm/test/MPPDB_backup.sql
SET
SET
SET
SET
SET
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
SET
CREATE INDEX
REVOKE
REVOKE
GRANT
GRANT
total time: 30476 ms
gs_restore用來導(dǎo)入由gs_dump生成的導(dǎo)出文件。
示例1:執(zhí)行g(shù)s_restore,將導(dǎo)出的MPPDB_backup.dmp文件(自定義歸檔格式)導(dǎo)入到postgres數(shù)據(jù)庫。
gs_restore -W Bigdata@123 backup/MPPDB_backup.dmp -p 15400 -d postgres
restore operation successful
total time: 13053 ms
示例2:執(zhí)行g(shù)s_restore,將導(dǎo)出的MPPDB_backup.tar文件(tar格式)導(dǎo)入到postgres數(shù)據(jù)庫。
gs_restore backup/MPPDB_backup.tar -p 15400 -d postgres
restore operation successful
total time: 21203 ms
示例3:執(zhí)行g(shù)s_restore,將導(dǎo)出的MPPDB_backup文件(目錄格式)導(dǎo)入到postgres數(shù)據(jù)庫。
gs_restore backup/MPPDB_backup -p 15400 -d postgres
restore operation successful
total time: 21003 ms
示例4:執(zhí)行g(shù)s_restore,使用自定義歸檔格式的MPPDB_backup.dmp文件來進行如下導(dǎo)入操作。 導(dǎo)入PUBLIC模式下所有對象的定義和數(shù)據(jù)。在導(dǎo)入時會先刪除已經(jīng)存在的對象,如果原對象存在跨模式的依賴則需手工強制干預(yù)。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -n PUBLIC
Error while PROCESSING TOC:
Error from TOC entry 313; 1259 337399 TABLE table1 gaussdba
could not execute query: ERROR: cannot drop table table1 because other objects depend on it
DETAIL: view t1.v1 depends on table table1
HINT: Use DROP ... CASCADE to drop the dependent objects too.
Command was: DROP TABLE IF EXISTS public.table1;
手工刪除依賴,導(dǎo)入完成后再重新創(chuàng)建。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -n PUBLIC
restore operation successful
total time: 2203 ms
示例5:執(zhí)行g(shù)s_restore,使用自定義歸檔格式的MPPDB_backup.dmp文件來進行如下導(dǎo)入操作。只導(dǎo)入PUBLIC模式下表table1的定義。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -s -n PUBLIC -t table1
restore operation successful
total time: 21000 ms
示例6:執(zhí)行g(shù)s_restore,使用自定義歸檔格式的MPPDB_backup.dmp文件來進行如下導(dǎo)入操作。只導(dǎo)入PUBLIC模式下表table1的數(shù)據(jù)。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -a -n PUBLIC -t table1
restore operation successful
total time: 20203 ms
?? 點贊,你的認(rèn)可是我創(chuàng)作的動力!
?? 收藏,你的青睞是我努力的方向!
?? 評論,你的意見是我進步的財富!
