成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據庫PostgreSQL備份與恢復工具使用詳解

原創 精選
數據庫 PostgreSQL
PostgreSQL 提供了一系列強大的工具來備份和恢復數據庫。這些工具包括 pg_dump, pg_restore, pg_dumpall, 和 pg_basebackup。

目錄

概述

pg_dump

pg_dumpall

pg_basebackup

pg_restore

總結

概述

PostgreSQL 提供了一系列強大的工具來備份和恢復數據庫。這些工具包括 pg_dump, pg_restore, pg_dumpall, 和 pg_basebackup。下面是這些工具的簡要概述和一些注意事項:

1. pg_dump

pg_dump 是一個用于備份單個 PostgreSQL 數據庫的工具。它可以生成 SQL 文件或自包含的歸檔文件,其中包含了創建和填充數據庫所需的所有 SQL 命令。

用途:備份單個數據庫。

2. pg_dumpall

pg_dumpall 用于備份整個 PostgreSQL 集群,包括所有數據庫、角色、表空間等。

用途:備份整個 PostgreSQL 集群。

3. pg_basebackup

pg_basebackup 用于創建整個 PostgreSQL 數據目錄的物理備份,這對于災難恢復尤為重要。

用途:備份整個 PostgreSQL 數據目錄。

4. pg_restore

pg_restore 是一個用于從 pg_dump 創建的備份文件恢復數據的工具。

用途:恢復單個數據庫。

一、pg_dump

pg_dump參數詳解

# 通用選項
-f, --file=FILENAME # 輸出文件或目錄的名稱。
-F, --format=c|d|t|p # 輸出文件格式(自定義[c]、目錄[d]、tar[t]、純文本[p],默認為純文本)。
-j, --jobs=NUM # 使用指定數量的并行任務來執行數據庫轉儲。
-v, --verbose # 詳細模式。
-V, --version # 輸出版本信息,然后退出。
-Z, --compress=METHOD[:DETAIL] # 按指定的方式壓縮輸出。
--lock-wait-timeout=TIMEOUT # 在等待表鎖超時后失敗,超時時間為TIMEOUT。
--no-sync # 不等待更改安全地寫入磁盤。
-?, --help # 顯示幫助,然后退出。

# 控制輸出內容的選項
-a, --data-only # 只轉儲數據,不轉儲模式。
-b, --large-objects # 在轉儲中包含大對象。
--blobs # (與--large-objects相同,已棄用)
-B, --no-large-objects # 在轉儲中排除大對象。
--no-blobs # (與--no-large-objects相同,已棄用)
-c, --clean # 清理(刪除)數據庫對象后再重新創建。
-C, --create # 在轉儲中包含創建數據庫的命令。
-e, --extension=PATTERN # 只轉儲指定的擴展。
-E, --encoding=ENCODING # 以指定的編碼ENCODING轉儲數據。
-n, --schema=PATTERN # 只轉儲指定的模式。
-N, --exclude-schema=PATTERN # 不轉儲指定的模式。
-O, --no-owner # 在純文本格式中跳過對象所有權的恢復。
-s, --schema-only # 只轉儲模式,不轉儲數據。
-S, --superuser=NAME # 在純文本格式中使用的超級用戶名。
-t, --table=PATTERN # 只轉儲指定的表。
-T, --exclude-table=PATTERN # 不轉儲指定的表。
-x, --no-privileges # 不轉儲權限(grant/revoke)。
--binary-upgrade # 僅用于升級工具。
--column-inserts # 作為帶有列名的INSERT命令轉儲數據。
--disable-dollar-quoting # 禁用美元符號引用,使用SQL標準引用。
--disable-triggers # 在僅數據恢復時禁用觸發器。
--enable-row-security # 啟用行級安全性(僅轉儲用戶有訪問權限的內容)。
--exclude-table-and-children=PATTERN # 不轉儲指定的表及其子表和分區表。
--exclude-table-data=PATTERN # 不轉儲指定表的數據。
--exclude-table-data-and-children=PATTERN # 不轉儲指定表及其子表和分區表的數據。
--extra-float-digits=NUM # 覆蓋extra_float_digits的默認設置。
--if-exists # 在刪除對象時使用IF EXISTS。
--include-foreign-data=PATTERN # 包含與指定模式匹配的外部服務器上的外部表數據。
--inserts # 作為INSERT命令而不是COPY命令轉儲數據。
--load-via-partition-root # 通過根表加載分區。
--no-comments # 不轉儲注釋。
--no-publications # 不轉儲發布。
--no-security-labels # 不轉儲安全標簽分配。
--no-subscriptions # 不轉儲訂閱。
--no-table-access-method # 不轉儲表訪問方法。
--no-tablespaces # 不轉儲表空間分配。
--no-toast-compression # 不轉儲TOAST壓縮方法。
--no-unlogged-table-data # 不轉儲未登錄表的數據。
--on-conflict-do-nothing # 在INSERT命令中添加ON CONFLICT DO NOTHING。
--quote-all-identifiers # 引用所有標識符,即使它們不是關鍵字。
--rows-per-insert=NROWS # 每個INSERT命令中的行數;隱含--inserts。
--section=SECTION # 轉儲命名的段(預數據、數據或后數據)。
--serializable-deferrable # 等待直到可以無異常地運行轉儲。
--snapshot=SNAPSHOT # 使用給定的快照進行轉儲。
--strict-names # 要求表和/或模式包含模式至少匹配一個實體。
--table-and-children=PATTERN # 只轉儲指定的表及其子表和分區表。
--use-set-session-authorization # 使用SET SESSION AUTHORIZATION命令代替ALTER OWNER命令來設置所有權。

# 連接選項
-d, --dbname=DBNAME # 要轉儲的數據庫名稱。
-h, --host=HOSTNAME # 數據庫服務器的主機名或套接字目錄。
-p, --port=PORT # 數據庫服務器的端口號。
-U, --username=NAME # 以指定的數據庫用戶連接。
-w, --no-password # 永遠不要提示輸入密碼。
-W, --password # 強制提示輸入密碼(應自動發生)。
--role=ROLENAME # 在轉儲前執行SET ROLE。

# 如果沒有提供數據庫名稱,則使用PGDATABASE環境變量的值。

pg_dump使用示例

要將數據庫轉儲到自定義格式的存檔文件中,請執行以下操作:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -Fc -d mydb > db.dump

要將數據庫轉儲到目錄格式存檔中,請執行以下操作:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -Fd -d mydb -f dumpdir

要將數據庫轉儲到目錄格式存檔中,同時執行 5 個工作線程作業:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -Fd -d mydb -j 5 -f dumpdir

轉儲名為:mytab

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -d mydb > mytab.sql

轉儲以emp開頭的所有表,排除名為 :empdetroitemployee_log集合

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql

轉儲名稱以 east 開頭且以 gsm結尾的所有集合,排除名稱包含單詞test : 的集合

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -n 'east*gsm' -N '*test*' mydb > db.sql

同樣,使用正則表達式表示法來合并開關:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -n '(east|west)*gsm' -N '*test*' mydb > db.sql

轉儲除名稱以ts_*開頭的集合之外的所有集合

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -T 'ts_*' mydb > db.sql

轉儲具有混合大小寫名稱的單個表,您需要類似-t

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -t "\"MixedCaseName\"" mydb > mytab.sql

備份數據庫結構(不包含數據)

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W --schema-only mydatabase > mydatabase_schema_only.sql

備份數據庫數據(不包含結構)

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W --data-only mydatabase > mydatabase_schema_only.sql

備份多個特定表

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -t table1 -t table2 mydatabase > tables_backup.sql

備份數據庫并壓縮

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W -d mydb | gzip > mydatabase_backup.sql.gz

備份并導出為 INSERT 語句

pg_dump -U postgres -h 127.0.0.1 -p 5432 -W --format=c --large-objects --inserts mydatabase > insert_statements.sql
pg_dump -U postgres -h 127.0.0.1 -p 5432 -W --schema-only mydatabase > all_schemas_structure.sql

二、pg_dumpall

pg_dumpall參數詳解

# 使用語法
pg_dumpall [OPTION]...

# 通用選項
-f, --file=FILENAME # 輸出文件名
-v, --verbose # 詳細模式
-V, --version # 輸出版本信息,然后退出
--lock-wait-timeout=TIMEOUT # 鎖等待超時后失敗,單位為毫秒
-?, --help # 顯示此幫助,然后退出

# 控制輸出內容的選項
-a, --data-only # 僅轉儲數據,不轉儲模式
-c, --clean # 清除(刪除)數據庫后再重新創建
-E, --encoding=ENCODING # 以編碼ENCODING轉儲數據
-g, --globals-only # 僅轉儲全局對象,不包括數據庫
-O, --no-owner # 跳過對象所有權的恢復
-r, --roles-only # 僅轉儲角色,不包括數據庫或表空間
-s, --schema-only # 僅轉儲模式,不包括數據
-S, --superuser=NAME # 超級用戶用戶名,用于轉儲中
-t, --tablespaces-only # 僅轉儲表空間,不包括數據庫或角色
-x, --no-privileges # 不轉儲權限(授予/撤銷)
--binary-upgrade # 僅供升級工具使用
--column-inserts # 將數據轉儲為帶有列名的INSERT命令
--disable-dollar-quoting # 禁用美元符引用,使用SQL標準引用
--disable-triggers # 在僅數據恢復時禁用觸發器
--exclude-database=PATTERN # 排除名稱匹配PATTERN的數據庫
--extra-float-digits=NUM # 覆蓋默認的extra_float_digits設置
--if-exists # 刪除對象時使用IF EXISTS
--inserts # 將數據轉儲為INSERT命令,而非COPY命令
--load-via-partition-root # 通過根表加載分區
--no-comments # 不轉儲注釋
--no-publications # 不轉儲發布
--no-role-passwords # 不轉儲角色密碼
--no-security-labels # 不轉儲安全標簽分配
--no-subscriptions # 不轉儲訂閱
--no-sync # 不等待變更被安全地寫入磁盤
--no-table-access-method # 不轉儲表訪問方法
--no-tablespaces # 不轉儲表空間分配
--no-toast-compression # 不轉儲TOAST壓縮方法
--no-unlogged-table-data # 不轉儲未登錄表的數據
--on-conflict-do-nothing # 在INSERT命令中添加ON CONFLICT DO NOTHING
--quote-all-identifiers # 引用所有標識符,即使它們不是關鍵字
--rows-per-insert=NROWS # 每個INSERT語句中的行數;隱含--inserts
--use-set-session-authorization

pg_dumpall使用示例

#備份整個數據庫以及角色
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W -f alldb_backup.sql
#備份所有數據庫角色和全局對象
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W --globals-only -f globals_backup.sql
#僅備份角色
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W --roles-only -f alldb_backup.sql
#僅備份數據
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W --data-only -f alldb_backup.sql
#忽略某個庫
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W -f alldb_backup.sql --exclude-database=mydb > alldb_backup.sql
#將數據轉儲為帶有列名的INSERT命令
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W --column-inserts -f alldb_backup.sql
#將數據轉儲為INSERT命令
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -W --inserts -f alldb_backup.sql
#備份壓縮
pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -w --inserts | gzip > alldb_backup.sql.gz

三、pg_basebackup

pg_basebackup參數詳解

# 使用語法
pg_basebackup [OPTION]...

# 控制輸出的選項
-D, --pgdata=DIRECTORY # 將基線備份接收至指定目錄
-F, --format=p|t # 輸出格式(plain(默認),tar)
-r, --max-rate=RATE # 設置數據目錄傳輸的最大速率(單位為kB/s,或使用"k"或"M"后綴)
-R, --write-recovery-conf # 寫入用于復制的配置文件
-t, --target=TARGET[:DETAIL]
 # 備份目標(如果不同于客戶端)
-T, --tablespace-mapping=OLDDIR=NEWDIR
 # 將位于OLDDIR的表空間重定位至NEWDIR
--waldir=WALDIR # 寫前日志(WAL)目錄的位置
-X, --wal-method=none|fetch|stream
 # 使用指定的方法包含所需的WAL文件
-z, --gzip # 壓縮tar輸出
-Z, --compress=[{client|server}-]METHOD[:DETAIL]
 # 按指定方式在客戶端或服務器上進行壓縮
-Z, --compress=none # 不壓縮tar輸出

# 通用選項
-c, --checkpoint=fast|spread # 設置快速或分散的檢查點
-C, --create-slot # 創建復制槽
-l, --label=LABEL # 設置備份標簽
-n, --no-clean # 出現錯誤后不清理
-N, --no-sync # 不等待更改被安全地寫入磁盤
-P, --progress # 顯示進度信息
-S, --slot=SLOTNAME # 使用的復制槽
-v, --verbose # 輸出詳細信息
-V, --version # 輸出版本信息,然后退出
--manifest-checksums=SHA{224,256,384,512}|CRC32C|NONE
 # 使用算法進行清單校驗和
--manifest-force-encode # 對清單中的所有文件名進行十六進制編碼
--no-estimate-size # 不在服務器端估計備份大小
--no-manifest # 抑制生成備份清單
--no-slot # 阻止創建臨時復制槽
--no-verify-checksums # 不驗證校驗和
-?, --help # 顯示此幫助,然后退出

# 連接選項
-d, --dbname=CONNSTR # 連接字符串
-h, --host=HOSTNAME # 數據庫服務器主機名或套接字目錄
-p, --port=PORT # 數據庫服務器端口號
-s, --status-interval=INTERVAL
 # 發送至服務器的狀態包的時間間隔(單位為秒)
-U, --username=NAME # 作為指定的數據庫用戶連接
-w, --no-password # 從不提示輸入密碼
-W, --password # 強制密碼提示(應自動發生)

pg_basebackup使用示例

普通文件:

pg_basebackup -h 10.10.9.7 -U replication_user -p 5432 -Xs -v -Fp -P -r 100M -R -D /root/zz/

壓縮:

pg_basebackup -h 10.10.9.7 -U replication_user -p 5432 -Xs -v -Ft -P -r 100M -R -D /root/zz/

四、pg_restore

pg_restore參數詳解

# 使用語法
pg_restore [OPTION]... [FILE]

# 通用選項
-d, --dbname=NAME # 連接到指定的數據庫名
-f, --file=FILENAME # 輸出文件名 (- 表示標準輸出)
-F, --format=c|d|t # 備份文件格式(通常應自動識別)
-l, --list # 打印歸檔的TOC(目錄)摘要
-v, --verbose # 詳細模式
-V, --version # 輸出版本信息,然后退出
-?, --help # 顯示幫助信息,然后退出

# 控制恢復的選項
-a, --data-only # 只恢復數據,不恢復模式(schema)
-c, --clean # 清理(刪除)數據庫對象之前重新創建
-C, --create # 創建目標數據庫
-e, --exit-on-error # 出錯時退出,默認是繼續執行
-I, --index=NAME # 恢復指定名稱的索引
-j, --jobs=NUM # 使用多個并行任務來恢復
-L, --use-list=FILENAME # 使用此文件中的TOC選擇/排序輸出
-n, --schema=NAME # 只恢復此模式(schema)中的對象
-N, --exclude-schema=NAME # 不恢復此模式(schema)中的對象
-O, --no-owner # 跳過對象所有權的恢復
-P, --function=NAME(args) # 恢復指定名稱的函數
-s, --schema-only # 只恢復模式(schema),不恢復數據
-S, --superuser=NAME # 用于禁用觸發器的超級用戶名
-t, --table=NAME # 恢復指定名稱的關系(表,視圖等)
-T, --trigger=NAME # 恢復指定名稱的觸發器
-x, --no-privileges # 跳過訪問權限的恢復(grant/revoke)
-1, --single-transaction # 作為一個單一的事務恢復
--disable-triggers # 在僅數據恢復期間禁用觸發器
--enable-row-security # 啟用行級安全性
--if-exists # 在刪除對象時使用IF EXISTS
--no-comments # 不恢復注釋
--no-data-for-failed-tables # 不恢復未能創建的表的數據
--no-publications # 不恢復發布(publications)
--no-security-labels # 不恢復安全標簽
--no-subscriptions # 不恢復訂閱
--no-table-access-method # 不恢復表訪問方法
--no-tablespaces # 不恢復表空間分配
--section=SECTION # 恢復指定部分(pre-data, data, 或 post-data)
--strict-names # 要求表和/或模式包含模式至少匹配每個實體
--use-set-session-authorization
 # 使用SET SESSION AUTHORIZATION命令而不是ALTER OWNER命令來設置所有權

# 連接選項
-h, --host=HOSTNAME # 數據庫服務器主機名或套接字目錄
-p, --port=PORT # 數據庫服務器端口號
-U, --username=NAME # 以指定的數據庫用戶身份連接
-w, --no-password # 從不提示輸入密碼
-W, --password # 強制密碼提示(應自動發生)
--role=ROLENAME # 在恢復前執行SET ROLE

# 注意事項
# -I, -n, -N, -P, -t, -T 和 --section 選項可以組合并多次指定以選擇多個對象。

# 如果沒有提供輸入文件名,則使用標準輸入。

pg_restore使用示例

1.恢復整個數據庫

pg_restore -U postgres -h 127.0.0.1 -p 5432 -W -d mydb db.dump

2.恢復到指定的數據庫并使用不同的用戶名

pg_restore -U username -d new_database db.dump

3.恢復部分數據庫對象

恢復指定表

pg_restore -d new_database -t table_name db.dump

恢復的模式名

pg_restore -d new_database -n schema_name db.dump

4.恢復時使用 --create 選項創建數據庫

pg_restore --create -d postgres db.dump

5.恢復到現有數據庫,并使用并行恢復

pg_restore -d new_database -j 4 db.dump

6.將恢復輸出重定向到文件

pg_restore -U postgres -h 127.0.0.1 -p 5432 -W --file=output.sql db.dump

7.只恢復數據,不恢復表結構

pg_restore -U postgres -h 127.0.0.1 -p 5432 -W -d mydb --data-only -j 4 db.dump

8.報錯時退出,默認繼續執行

pg_restore -d new_database -j 4 --exit-on-error db.dump 

9.不恢復此模式(schema)中的表

pg_restore -d new_database -j 4 --exit-on-error --exclude-schema=NAME db.dump 

10.跳過權限的恢復

pg_restore -d new_database -j 4 --exit-on-error --no-owner --no-privileges db.dump 

11.以事務方式導入

pg_restore -U postgres -h 127.0.0.1 -p 5432 -W -d mydb --single-transaction db.dump

總結

根據備份的需求選擇合適的工具。pg_dump 用于單個數據庫的備份和恢復,pg_dumpall 用于整個集群的備份,pg_basebackup 用于物理備份。

  • 備份策略:制定定期備份計劃,并測試恢復過程,確保備份文件可用。
  • 安全:備份文件可能包含敏感數據,應妥善保管備份文件,并考慮使用加密。
  • 測試:定期測試備份文件的恢復,以確保在需要時能夠正確恢復數據。
  • 性能:對于大型數據庫,考慮使用流式備份或并行備份來提高備份和恢復的速度。
  • 權限:確保執行備份和恢復的用戶具有適當的權限。

作者介紹

吳守陽,51CTO社區編輯,擁有8年DBA工作經驗,熟練管理MySQL、Redis、MongoDB等開源數據庫。精通性能優化、備份恢復和高可用性架構設計。善于故障排除和自動化運維,保障系統穩定可靠。具備良好的團隊合作和溝通能力,致力于為企業提供高效可靠的數據庫解決方案。

責任編輯:華軒 來源: 51CTO
相關推薦

2011-07-26 13:55:01

MongoDB備份與恢復

2014-01-03 17:43:18

Linux文件恢復文件恢復工具

2009-04-03 10:54:49

Oracle備份恢復

2011-04-11 13:46:17

Oracle數據庫備份

2023-05-31 08:54:14

MySQL邏輯備份

2009-10-13 09:43:43

Oracle數據庫備份

2011-05-20 09:35:24

Oracle數據庫恢復備份

2009-03-17 16:00:47

Oracle數據庫備份

2010-04-13 11:09:21

Oracle數據庫

2010-03-31 10:39:40

RMANOracle

2019-02-28 21:20:50

MySQL備份與恢復數據庫

2017-04-24 14:29:42

存儲備份寶災備

2011-08-01 12:44:25

Oracle基于用戶管理備份與恢復

2023-09-12 09:45:54

Java數據庫

2023-12-27 22:08:39

vivo數據庫

2011-08-24 15:36:30

2011-05-17 15:02:15

ORACLE數據庫備份

2015-08-25 09:23:00

2023-11-15 09:38:49

Oracle數據庫

2009-03-25 17:43:09

備份DB2IBM
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲欧美 | 丝袜美腿一区 | 精品久久久久一区二区国产 | 少妇黄色| 国产成人精品a视频一区www | 福利片一区二区 | 亚洲精品视频在线 | 欧美人人 | 中国大陆高清aⅴ毛片 | 亚洲欧美国产一区二区三区 | 久久久久久99 | 中文字幕一区在线观看视频 | 不卡视频一区二区三区 | 99re在线 | 精品乱人伦一区二区三区 | 五月网婷婷 | 欧美中文字幕一区二区三区亚洲 | 999在线精品| 国产高清精品一区二区三区 | 一区二区三区四区免费视频 | 日本a在线 | 国产激情视频在线观看 | 欧美不卡 | 国产精品一区二区福利视频 | 久久99精品久久久久久秒播九色 | 国产免费一区二区三区 | 国产精品久久久久一区二区三区 | 手机看片在线播放 | 国产日韩欧美精品一区二区 | 亚洲一区二区精品视频 | 在线观看中文字幕视频 | 欧美精品在欧美一区二区少妇 | 毛片在线视频 | 亚洲精品久久久久久首妖 | 国产精品视频一区二区三区 | 午夜精品福利视频 | 国产一区 在线视频 | 国产一区在线免费 | 色爱区综合 | 午夜精品在线 | 久久久久久久久一区 |