openGauss學(xué)習(xí)筆記-148 openGauss 數(shù)據(jù)庫運(yùn)維-備份與恢復(fù)-邏輯備份與恢復(fù)之gs_dumpall148.1 背景信息148.2 注意事項(xiàng)148.3 語法148.4 參數(shù)說明148.4.1 通用參數(shù)148.4.2 轉(zhuǎn)儲(chǔ)參數(shù)148.5 說明148.6 示例
openGauss學(xué)習(xí)筆記-148 openGauss 數(shù)據(jù)庫運(yùn)維-備份與恢復(fù)-邏輯備份與恢復(fù)之gs_dumpall
148.1 背景信息
gs_dumpall是openGauss用于導(dǎo)出所有數(shù)據(jù)庫相關(guān)信息工具,它可以導(dǎo)出openGauss數(shù)據(jù)庫的所有數(shù)據(jù),包括默認(rèn)數(shù)據(jù)庫postgres的數(shù)據(jù)、自定義數(shù)據(jù)庫的數(shù)據(jù)以及openGauss所有數(shù)據(jù)庫公共的全局對(duì)象。
gs_dumpall工具由操作系統(tǒng)用戶omm執(zhí)行。
gs_dumpall工具在進(jìn)行數(shù)據(jù)導(dǎo)出時(shí),其他用戶可以訪問openGauss數(shù)據(jù)庫(讀或?qū)懀?/p>
gs_dumpall工具支持導(dǎo)出完整一致的數(shù)據(jù)。例如,T1時(shí)刻啟動(dòng)gs_dumpall導(dǎo)出openGauss數(shù)據(jù)庫,那么導(dǎo)出數(shù)據(jù)結(jié)果將會(huì)是T1時(shí)刻該openGauss數(shù)據(jù)庫的數(shù)據(jù)狀態(tài),T1時(shí)刻之后對(duì)openGauss的修改不會(huì)被導(dǎo)出。
gs_dumpall時(shí)生成列不會(huì)被轉(zhuǎn)儲(chǔ)。
gs_dumpall在導(dǎo)出openGauss所有數(shù)據(jù)庫時(shí)分為兩部分:
gs_dumpall自身對(duì)所有數(shù)據(jù)庫公共的全局對(duì)象進(jìn)行導(dǎo)出,包括有關(guān)數(shù)據(jù)庫用戶和組、表空間以及屬性(例如,適用于數(shù)據(jù)庫整體的訪問權(quán)限)信息。
gs_dumpall通過調(diào)用gs_dump來完成openGauss中各數(shù)據(jù)庫的SQL腳本文件導(dǎo)出,該腳本文件包含將數(shù)據(jù)庫恢復(fù)為其保存時(shí)的狀態(tài)所需要的全部SQL語句。
以上兩部分導(dǎo)出的結(jié)果為純文本格式的SQL腳本文件,使用gsql運(yùn)行該腳本文件可以恢復(fù)openGauss數(shù)據(jù)庫。
148.2 注意事項(xiàng)
禁止修改導(dǎo)出的文件和內(nèi)容,否則可能無法恢復(fù)成功。
為了保證數(shù)據(jù)一致性和完整性,gs_dumpall會(huì)對(duì)需要轉(zhuǎn)儲(chǔ)的表設(shè)置共享鎖。如果某張表在別的事務(wù)中設(shè)置了共享鎖,gs_dumpall會(huì)等待此表的鎖釋放后鎖定此表。如果無法在指定時(shí)間內(nèi)鎖定某張表,轉(zhuǎn)儲(chǔ)會(huì)失敗。用戶可以通過指定–lock-wait-timeout選項(xiàng),自定義等待鎖超時(shí)時(shí)間。
由于gs_dumpall讀取所有數(shù)據(jù)庫中的表,因此必須以openGauss管理員身份進(jìn)行連接,才能導(dǎo)出完整文件。在使用gsql執(zhí)行腳本文件導(dǎo)入時(shí),同樣需要管理員權(quán)限,以便添加用戶和組以及創(chuàng)建數(shù)據(jù)庫。
148.3 語法
gs_dumpall [OPTION]...
148.4 參數(shù)說明
148.4.1 通用參數(shù)
-
-f, –filename=FILENAME
將輸出發(fā)送至指定文件。如果這里省略,則使用標(biāo)準(zhǔn)輸出。
-
-v, –verbose
指定verbose模式。該選項(xiàng)將導(dǎo)致gs_dumpall向轉(zhuǎn)儲(chǔ)文件輸出詳細(xì)的對(duì)象注解和啟動(dòng)/停止次數(shù),向標(biāo)準(zhǔn)錯(cuò)誤流輸出處理信息。
-
-V, –version
打印gs_dumpall版本,然后退出。
-
–lock-wait-timeout=TIMEOUT
請(qǐng)勿在轉(zhuǎn)儲(chǔ)剛開始時(shí)一直等待以獲取共享表鎖。如果無法在指定時(shí)間內(nèi)鎖定某個(gè)表,就選擇失敗??梢砸匀魏畏蟂ET statement_timeout的格式指定超時(shí)時(shí)間。
-
-?, –help
顯示gs_dumpall命令行參數(shù)幫助,然后退出。
148.4.2 轉(zhuǎn)儲(chǔ)參數(shù)
-
-a, –data-only
只轉(zhuǎn)儲(chǔ)數(shù)據(jù),不轉(zhuǎn)儲(chǔ)模式(數(shù)據(jù)定義)。
-
-c, –clean
在重新創(chuàng)建數(shù)據(jù)庫之前,執(zhí)行SQL語句清理(刪除)這些數(shù)據(jù)庫。針對(duì)角色和表空間的轉(zhuǎn)儲(chǔ)命令已添加。
-
-g, –globals-only
只轉(zhuǎn)儲(chǔ)全局對(duì)象(角色和表空間),無數(shù)據(jù)庫。
-
-o, –oids
轉(zhuǎn)儲(chǔ)每個(gè)表的對(duì)象標(biāo)識(shí)符(OIDs),作為表的一部分?jǐn)?shù)據(jù)。該選項(xiàng)用于應(yīng)用以某種方式參照了OID列的情況。如果不是以上這種情況,請(qǐng)勿使用該選項(xiàng)。
-
-O, –no-owner
不輸出設(shè)置對(duì)象的歸屬這樣的命令,以匹配原始數(shù)據(jù)庫。默認(rèn)情況下,gs_dumpall會(huì)發(fā)出ALTER OWNER或SET SESSION AUTHORIZATION語句設(shè)置所創(chuàng)建的模式元素的所屬。如果腳本正在運(yùn)行,該語句不會(huì)執(zhí)行成功,除非是由系統(tǒng)管理員觸發(fā)(或是擁有腳本中所有對(duì)象的同一個(gè)用戶)。通過指定-O,編寫一個(gè)任何用戶都能存儲(chǔ)的腳本,且該腳本會(huì)授予該用戶擁有所有對(duì)象的權(quán)限。
-
-r, –roles-only
只轉(zhuǎn)儲(chǔ)角色,不轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫或表空間。
-
-s, –schema-only
只轉(zhuǎn)儲(chǔ)對(duì)象定義(模式),而非數(shù)據(jù)。
-
-S, –sysadmin=NAME
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。。
-
-t, –tablespaces-only
只轉(zhuǎn)儲(chǔ)表空間,不轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫或角色。
-
-x, –no-privileges
防止轉(zhuǎn)儲(chǔ)訪問權(quán)限(授權(quán)/撤銷命令)。
-
–column-inserts|–attribute-inserts
以INSERT命令帶列名(INSERT INTO表(列、…)值…)方式導(dǎo)出數(shù)據(jù)。這會(huì)導(dǎo)致恢復(fù)緩慢。但是由于該選項(xiàng)會(huì)針對(duì)每行生成一個(gè)獨(dú)立分開的命令,所以在重新加載某行時(shí)出現(xiàn)的錯(cuò)誤只會(huì)導(dǎo)致那行丟失,而非整個(gè)表內(nèi)容。
-
–disable-dollar-quoting
該選項(xiàng)將禁止在函數(shù)體前使用美元符號(hào)$,并強(qiáng)制使用SQL標(biāo)準(zhǔn)字符串語法對(duì)其進(jìn)行引用。
-
–disable-triggers
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–inserts
發(fā)出INSERT命令(而非COPY命令)轉(zhuǎn)儲(chǔ)數(shù)據(jù)。這會(huì)導(dǎo)致恢復(fù)緩慢。注意:如果重排列順序,可能會(huì)導(dǎo)致恢復(fù)整個(gè)失敗。–column-inserts選項(xiàng)更加安全,雖然可能更慢些。
-
–no-security-labels
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–no-tablespaces
請(qǐng)勿輸出創(chuàng)建表空間的命令,也請(qǐng)勿針對(duì)對(duì)象選擇表空間。使用該選項(xiàng),無論默認(rèn)表空間是哪個(gè),在恢復(fù)過程中所有對(duì)象都會(huì)被創(chuàng)建。
-
–no-publications
不轉(zhuǎn)儲(chǔ)發(fā)布。
-
–no-security-labels
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–no-subscriptions
不轉(zhuǎn)儲(chǔ)訂閱。
-
–include-alter-table
導(dǎo)出表中已刪除的列信息。
-
–quote-all-identifiers
強(qiáng)制對(duì)所有標(biāo)識(shí)符加引號(hào)。為了向后續(xù)版本遷移,且其中可能涉及引入額外關(guān)鍵詞,在轉(zhuǎn)儲(chǔ)相應(yīng)數(shù)據(jù)庫時(shí)該選項(xiàng)會(huì)有幫助。
-
–dont-overwrite-file
不重寫當(dāng)前文件。
-
–use-set-session-authorization
輸出符合SQL標(biāo)準(zhǔn)的SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令來確定對(duì)象所有權(quán)。這樣令轉(zhuǎn)儲(chǔ)更加符合標(biāo)準(zhǔn),但是如果轉(zhuǎn)儲(chǔ)文件中的對(duì)象的歷史有些問題,那么可能不能正確恢復(fù)。并且,使用SET SESSION AUTHORIZATION的轉(zhuǎn)儲(chǔ)需要數(shù)據(jù)庫系統(tǒng)管理員的權(quán)限才能轉(zhuǎn)儲(chǔ)成功,而ALTER OWNER需要的權(quán)限則低得多。
-
–with-encryption=AES128
指定轉(zhuǎn)儲(chǔ)數(shù)據(jù)需用AES128進(jìn)行加密。
-
–with-key=KEY
AES128密鑰規(guī)則如下:
密鑰長(zhǎng)度為8~16個(gè)字符。
至少包含大寫字母(A-Z),小寫字母(a-z),數(shù)字(0-9),非字母數(shù)字字符(限定為~!@#$%^&*()-_=+|[{}];:,<.>/?)四類字符中的三類字符。
-
–include-Extensions
如果include-Extensions參數(shù)被設(shè)置,將備份所有的CREATE Extension語句。
-
–include-templatedb
轉(zhuǎn)儲(chǔ)過程中包含模板庫。
-
–binary-upgrade
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–binary-upgrade-usermap=“USER1=USER2”
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–non-lock-table
該參數(shù)僅供軟件間接口調(diào)用。
-
–tablespaces-postfix
該參數(shù)為擴(kuò)展預(yù)留接口,不建議使用。
-
–parallel-jobs
指定備份進(jìn)程并發(fā)數(shù),取值范圍為1~1000。
-
–pipeline
使用管道傳輸密碼,禁止在終端使用。
[圖片上傳失敗...(image-b15afb-1702083855992)]
說明:
- -g/–globals-only和-r/–roles-only不能同時(shí)使用。
- -g/–globals-only和-t/–tablespaces-only不能同時(shí)使用。
- -r/–roles-only和-t/–tablespaces-only不能同時(shí)使用。
- -s/–schema-only和-a/–data-only不能同時(shí)使用。
- -r/–roles-only和-a/–data-only不能同時(shí)使用。
- -t/–tablespaces-only和-a/–data-only不能同時(shí)使用。
- -g/–globals-only和-a/–data-only不能同時(shí)使用。
- –tablespaces-postfix和–binary-upgrade必須一起使用。
- –binary-upgrade-usermap和–binary-upgrade必須一起使用。
- –parallel-jobs和-f/–file必須一起使用。
連接參數(shù):
-
-h, –host=HOSTNAME
指定主機(jī)的名稱。如果取值是以斜線開頭,它將用作Unix域套接字的目錄。默認(rèn)值取自PGHOST環(huán)境變量;如果沒有設(shè)置,將啟動(dòng)某個(gè)Unix域套接字建立連接。
該參數(shù)只針對(duì)openGauss外,對(duì)openGauss內(nèi)本機(jī)只能用127.0.0.1。
環(huán)境變量:PGHOST
-
-l, –database=DATABASENAME
指定所連接的轉(zhuǎn)儲(chǔ)全局對(duì)象的數(shù)據(jù)庫名稱,并去尋找還有其他哪些數(shù)據(jù)庫需要被轉(zhuǎn)儲(chǔ)。如果沒有指定,會(huì)使用postgres數(shù)據(jù)庫,如果postgres數(shù)據(jù)庫不存在,會(huì)使用template1。
-
-p, –port=PORT
指定服務(wù)器所偵聽的TCP端口或本地Unix域套接字后綴,以確保連接。默認(rèn)值設(shè)置為PGPORT環(huán)境變量。
在開啟線程池情況下,建議使用 pooler port,即偵聽端口+1。
環(huán)境變量:PGPORT
-
-U, –username=NAME
所連接的用戶名。
環(huán)境變量:PGUSER
-
-w, –no-password
不出現(xiàn)輸入密碼提示。如果服務(wù)器要求密碼認(rèn)證并且密碼沒有通過其它形式給出,則連接嘗試將會(huì)失敗。 該選項(xiàng)在批量工作和不存在用戶輸入密碼的腳本中很有幫助。
-
-W, –password=PASSWORD
指定用戶連接的密碼。如果主機(jī)的認(rèn)證策略是trust,則不會(huì)對(duì)系統(tǒng)管理員進(jìn)行密碼驗(yàn)證,即無需輸入-W選項(xiàng);如果沒有-W選項(xiàng),并且不是系統(tǒng)管理員,“Dump Restore工具”會(huì)提示用戶輸入密碼。
-
–role=ROLENAME
指定創(chuàng)建轉(zhuǎn)儲(chǔ)使用的角色名。選擇該選項(xiàng),會(huì)使gs_dumpall連接數(shù)據(jù)庫后,發(fā)起一個(gè)SET ROLE角色名命令。當(dāng)所授權(quán)用戶(由-U指定)沒有g(shù)s_dumpall要求的權(quán)限時(shí),該選項(xiàng)會(huì)起到作用,即切換到具備相應(yīng)權(quán)限的角色。某些安裝操作規(guī)定不允許直接以系統(tǒng)管理員身份登錄,而使用該選項(xiàng)能夠在不違反該規(guī)定的情況下完成轉(zhuǎn)儲(chǔ)。
-
–rolepassword=ROLEPASSWORD
指定具體角色用戶的角色密碼。
148.5 說明
由于gs_dumpall內(nèi)部調(diào)用gs_dump,所以一些診斷信息參見gs_dump。
一旦恢復(fù),最好在每個(gè)數(shù)據(jù)庫上運(yùn)行ANALYZE,優(yōu)化程序提供有用的統(tǒng)計(jì)數(shù)據(jù)。
gs_dumpall恢復(fù)前需要所有必要的表空間目錄為空;否則,對(duì)于處在非默認(rèn)位置的數(shù)據(jù)庫,數(shù)據(jù)庫創(chuàng)建會(huì)失敗。
148.6 示例
使用gs_dumpall一次導(dǎo)出openGauss的所有數(shù)據(jù)庫。
[圖片上傳失敗...(image-a9d323-1702083855992)]
說明:
gs_dumpall僅支持純文本格式導(dǎo)出。所以只能使用gsql恢復(fù)gs_dumpall導(dǎo)出的轉(zhuǎn)儲(chǔ)內(nèi)容。
gs_dumpall -f backup/bkp2.sql -p 37300
gs_dump[port='37300'][dbname='postgres'][2018-06-27 09:55:09]: The total objects number is 2371.
gs_dump[port='37300'][dbname='postgres'][2018-06-27 09:55:35]: [100.00%] 2371 objects have been dumped.
gs_dump[port='37300'][dbname='postgres'][2018-06-27 09:55:46]: dump database dbname='postgres' successfully
gs_dump[port='37300'][dbname='postgres'][2018-06-27 09:55:46]: total time: 55567 ms
gs_dumpall[port='37300'][2018-06-27 09:55:46]: dumpall operation successful
gs_dumpall[port='37300'][2018-06-27 09:55:46]: total time: 56088 ms
?? 點(diǎn)贊,你的認(rèn)可是我創(chuàng)作的動(dòng)力!
?? 收藏,你的青睞是我努力的方向!
?? 評(píng)論,你的意見是我進(jìn)步的財(cái)富!
