最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL物理備份與搭建從庫詳細過程

 更新時間:2026年02月11日 09:07:00   作者:數據知道  
PostgreSQL物理備份是高可用、災難恢復和搭建從庫的核心手段,今天通過本文給大家介紹PostgreSQL物理備份與搭建從庫詳細過程,感興趣的朋友跟隨小編一起看看吧

在 PostgreSQL 中,物理備份(Physical Backup)是 PostgreSQL 高可用、災難恢復和搭建從庫(Standby)的核心手段。

一、物理備份基礎概念

1.1 什么是物理備份?

物理備份是指直接復制 PostgreSQL 的數據文件(即 $PGDATA 目錄下的所有文件),包括:

  • 表數據文件(base/
  • WAL 日志(pg_wal/
  • 控制文件(global/pg_control
  • 配置文件(postgresql.conf, pg_hba.conf 等)

與邏輯備份(pg_dump)不同,物理備份:

  • 保留數據庫內部結構(如 OID、文件布局);
  • 恢復速度極快(直接拷貝文件);
  • 支持時間點恢復(PITR)(配合 WAL 歸檔);
  • 可用于搭建流復制從庫。

1.2 物理備份的前提條件

要執(zhí)行有效的物理備份,必須滿足:

  • wal_level >= replica(默認 replica 即可);
  • 啟用連續(xù)歸檔(Continuous Archiving)或使用 pg_basebackup -X stream;
  • 備份期間數據庫可正常運行(熱備份);
  • 所有節(jié)點 PostgreSQL 版本、操作系統(tǒng)架構一致(主從搭建時)。

二、物理備份的兩種主流方法

2.1 方法一:使用 pg_basebackup(官方推薦)

pg_basebackup 是 PostgreSQL 自帶的工具,專為創(chuàng)建基礎備份(Base Backup)設計,支持流式傳輸 WAL,操作簡單、安全可靠。

基本語法

pg_basebackup [選項] -D <目標目錄>

常用選項說明

選項說明
-h <host>主庫 IP 或主機名
-U <user>復制用戶(需 REPLICATION 權限)
-D <dir>備份輸出目錄
-Fp / -Ft輸出格式:plain(默認)或 tar
-X stream同時流式接收 WAL,避免備份期間 WAL 被清理
-P顯示進度
-v詳細輸出
-R自動生成 standby 配置(用于搭建從庫)
-C在主庫創(chuàng)建復制槽(防止 WAL 過早回收)
-S <slot_name>指定復制槽名稱

實戰(zhàn):創(chuàng)建物理備份(用于 PITR)

# 創(chuàng)建備份目錄
mkdir -p /backup/base_$(date +%Y%m%d)
# 執(zhí)行備份
pg_basebackup -h 192.168.10.50 \
  -U repuser \
  -D /backup/base_$(date +%Y%m%d) \
  -Fp -P -v -X stream

此備份可用于后續(xù) PITR 恢復,但不能直接啟動為從庫(缺少 standby.signal)。

2.2 方法二:文件系統(tǒng)級快照(LVM/ZFS/Btrfs)

適用于支持快照的存儲系統(tǒng),備份速度接近瞬時,對數據庫性能影響極小。

以 LVM 為例

創(chuàng)建快照卷

lvcreate -L 10G -s -n pgdata_snap /dev/vg0/pgdata

快照大小需容納備份期間的寫入量。

掛載快照并拷貝

mkdir /mnt/snap
mount /dev/vg0/pgdata_snap /mnt/snap
rsync -aHAXx /mnt/snap/ /backup/base_$(date +%Y%m%d)/
umount /mnt/snap

刪除快照

lvremove /dev/vg0/pgdata_snap

優(yōu)勢與限制

  • 幾乎零停機、低 I/O 壓力;
  • 依賴特定存儲技術;
  • 需手動處理 WAL 歸檔一致性(建議配合 pg_start_backup() / pg_stop_backup())。

注意:PostgreSQL 15+ 已棄用 pg_start_backup(),推薦使用 pg_basebackup 或存儲快照 + WAL 歸檔。

三、基于物理備份搭建從庫(流復制 Standby)

物理備份是搭建從庫最標準、最高效的方式。以下演示如何使用 pg_basebackup 一鍵初始化從庫。

3.1 環(huán)境準備

節(jié)點IP角色
node1192.168.10.50Primary
node2192.168.10.51Standby

前提:

  • 主庫已配置流復制(見下文);
  • 從庫已安裝相同版本 PostgreSQL;
  • 網絡互通,SSH 免密(可選,用于文件同步)。

3.2 主庫配置(node1)

1. 修改postgresql.conf

listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB          # PG 13+,舊版用 wal_keep_segments
hot_standby = on

2. 配置pg_hba.conf

# 允許復制連接
host replication repuser 192.168.10.51/32 md5

3. 創(chuàng)建復制用戶

CREATE USER repuser WITH REPLICATION ENCRYPTED PASSWORD 'replpass123';

4. 重載配置

pg_ctl reload -D $PGDATA

3.3 從庫初始化(node2)

步驟 1:停止 PostgreSQL(如有)

sudo systemctl stop postgresql-14

步驟 2:清空數據目錄

rm -rf /var/lib/pgsql/14/data/*

步驟 3:使用 pg_basebackup 初始化

sudo -u postgres pg_basebackup \
  -h 192.168.10.50 \
  -U repuser \
  -D /var/lib/pgsql/14/data \
  -P -v -R -X stream -C -S standby_slot_1

關鍵選項解釋

  • -R:自動生成 standby.signalpostgresql.auto.conf(含 primary_conninfo);
  • -C -S:在主庫創(chuàng)建名為 standby_slot_1 的復制槽,防止 WAL 被過早清理。

步驟 4:驗證生成的文件

  • /var/lib/pgsql/14/data/standby.signal(空文件,標識為從庫);
  • postgresql.auto.conf 內容示例:
primary_conninfo = 'user=repuser password=replpass123 host=192.168.10.50 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
primary_slot_name = 'standby_slot_1'

步驟 5:啟動從庫

sudo systemctl start postgresql-14

3.4 驗證從庫狀態(tài)

在從庫執(zhí)行:

-- 確認處于恢復模式
SELECT pg_is_in_recovery();  -- 應返回 true
-- 查看是否只讀
SHOW hot_standby;            -- on

在主庫執(zhí)行:

-- 查看復制狀態(tài)
SELECT * FROM pg_stat_replication;

關鍵字段:

  • application_name:默認為 pg_basebackup,可通過 -E 指定;
  • statestreaming 表示正常流復制;
  • sync_stateasync(異步)或 sync(同步)。

四、物理備份 + WAL 歸檔實現(xiàn) PITR

若僅用于災難恢復(非搭建從庫),需配合 WAL 歸檔實現(xiàn)任意時間點恢復。

4.1 配置 WAL 歸檔(主庫)

# postgresql.conf
archive_mode = on
archive_command = 'cp %p /archive/wal/%f'

確保 /archive/wal/ 目錄存在且 PostgreSQL 有寫權限。

4.2 恢復流程

停止 PostgreSQL

pg_ctl stop -D $PGDATA

清理原數據目錄

rm -rf $PGDATA/*

還原物理備份

cp -r /backup/base_20260210/* $PGDATA/

創(chuàng)建 recovery.signal

touch $PGDATA/recovery.signal

配置恢復目標(可選)
$PGDATA/postgresql.auto.conf 中添加:

restore_command = 'cp /archive/wal/%f %p'
recovery_target_time = '2026-02-10 18:00:00'

啟動數據庫

pg_ctl start -D $PGDATA

數據庫將重放 WAL 至目標時間點,然后自動轉為主庫模式。

五、高級技巧與最佳實踐

5.1 使用復制槽(Replication Slot)保護 WAL

復制槽可防止主庫在從庫斷連時清理 WAL,避免從庫無法追平。

創(chuàng)建槽(主庫):

SELECT pg_create_physical_replication_slot('standby1');
  • 從庫配置中指定槽名(primary_slot_name)。

注意:需監(jiān)控槽的 lag,避免磁盤爆滿。

5.2 壓縮與遠程備份

  • 壓縮備份
    pg_basebackup ... -Ft | gzip > backup.tar.gz
  • 遠程備份
    pg_basebackup ... -D - | ssh user@remote "cat > backup.tar"

5.3 自動化腳本示例

#!/bin/bash
BACKUP_DIR="/backup/base_$(date +%Y%m%d)"
pg_basebackup -h 192.168.10.50 -U repuser -D "$BACKUP_DIR" -Fp -P -X stream
if [ $? -eq 0 ]; then
  echo "Backup succeeded: $BACKUP_DIR"
  # 清理7天前的備份
  find /backup -name "base_*" -mtime +7 -exec rm -rf {} \;
else
  echo "Backup failed!"
  exit 1
fi

5.4 常見問題排查

問題原因解決方案
pg_basebackup: could not connect to server主庫未監(jiān)聽、防火墻、認證失敗檢查 listen_addresses、pg_hba.conf、網絡
從庫啟動報錯 “WAL ends before end of backup”備份期間主庫重啟使用 -X stream 或確保 WAL 歸檔完整
從庫延遲高網絡慢、主庫負載高監(jiān)控 pg_stat_replication,優(yōu)化硬件
無法寫入從庫正常行為從庫為只讀,需 promote 后才可寫

六、物理備份 vs 邏輯備份對比

維度物理備份邏輯備份
恢復速度極快(文件拷貝)慢(SQL 重放)
備份體積大(含所有文件)?。▋H數據+DDL)
跨版本遷移不支持(需相同主版本)支持(需兼容)
搭建從庫唯一標準方式不可行
PITR 支持是(需 WAL)
存儲開銷

結論:生產環(huán)境高可用架構必須依賴物理備份;邏輯備份適用于跨版本遷移或部分表導出。

總結:PostgreSQL 物理備份是構建高可用、實現(xiàn)災難恢復的基石。通過 pg_basebackup,可一鍵完成:

  • 安全的熱備份;
  • 從庫的快速初始化;
  • 與 WAL 歸檔結合實現(xiàn) PITR。

關鍵要點:

  1. 主庫必須配置 wal_level = replica 和復制權限;
  2. 使用 -R -X stream -C 選項簡化從庫搭建;
  3. 復制槽可防止 WAL 丟失,但需監(jiān)控;
  4. 定期驗證備份可恢復性。

掌握物理備份技術,是 PostgreSQL DBA 的必備技能。

到此這篇關于PostgreSQL物理備份與搭建從庫的文章就介紹到這了,更多相關PostgreSQL物理備份內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Ubuntu中安裝PostgreSQL步驟及常規(guī)操作指南

    Ubuntu中安裝PostgreSQL步驟及常規(guī)操作指南

    PostgreSQL是一款很受歡迎的開源關系型數據庫管理系統(tǒng)(RDBMS),擴展性強,處理大量數據時效率很高,這篇文章主要介紹了Ubuntu中安裝PostgreSQL步驟及常規(guī)操作的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-09-09
  • PostgreSQL中JSONB的使用與踩坑指南

    PostgreSQL中JSONB的使用與踩坑指南

    文章介紹了PostgreSQL中JSONB的使用,包括JSONB的基礎操作、索引策略、數組操作和批量更新,文章通過實例詳細講解了JSONB的使用方法,幫助讀者解決實際工作中的問題,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • PostgreSQL regexp_matches替換like模糊查詢的操作

    PostgreSQL regexp_matches替換like模糊查詢的操作

    這篇文章主要介紹了PostgreSQL regexp_matches替換like模糊查詢的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL的dblink擴展模塊使用

    PostgreSQL的dblink擴展模塊使用

    PostgreSQL dblink擴展支持跨庫查詢,需定義返回列名和類型,可以實現(xiàn)在不同的數據庫之間進行通信和交互,下面就一起來了解一下
    2025-06-06
  • Postgresql 實現(xiàn)查詢一個表/所有表的所有列名

    Postgresql 實現(xiàn)查詢一個表/所有表的所有列名

    這篇文章主要介紹了Postgresql 實現(xiàn)查詢一個表/所有表的所有列名,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL 行列轉換的實現(xiàn)方法

    PostgreSQL 行列轉換的實現(xiàn)方法

    本文主要介紹了PostgreSQL 行列轉換的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-07-07
  • PostgreSQL13基于流復制搭建后備服務器的方法

    PostgreSQL13基于流復制搭建后備服務器的方法

    這篇文章主要介紹了PostgreSQL13基于流復制搭建后備服務器,后備服務器作為主服務器的數據備份,可以保障數據不丟,而且在主服務器發(fā)生故障后可以提升為主服務器繼續(xù)提供服務。需要的朋友可以參考下
    2022-01-01
  • PostgreSQL如何按照某一字段去重,并顯示其他字段信息

    PostgreSQL如何按照某一字段去重,并顯示其他字段信息

    這篇文章主要介紹了PostgreSQL如何按照某一字段去重,并顯示其他字段信息問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • PostgreSQL?auto_explain的具體使用

    PostgreSQL?auto_explain的具體使用

    PostgreSQL auto_explain插件自動記錄慢SQL執(zhí)行計劃,支持全局、會話及用戶級別加載,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • PostgreSQL核心原理之數據庫偶爾會卡頓的原因分析

    PostgreSQL核心原理之數據庫偶爾會卡頓的原因分析

    PostgreSQL功能強大、穩(wěn)定可靠的開源關系型數據庫系統(tǒng),廣泛應用于各種規(guī)模的企業(yè)和項目中,本文將從PostgreSQL的核心原理出發(fā),深入剖析導致“偶爾卡頓”的常見原因,并結合底層機制進行解釋,幫助 DBA 和開發(fā)者理解問題本質,從而更有效地排查與優(yōu)化,感興趣的朋友一起看看吧
    2026-02-02

最新評論

深泽县| 尼勒克县| 诏安县| 公安县| 班戈县| 高雄县| 临邑县| 泗洪县| 浠水县| 宜城市| 成武县| 宁安市| 曲阜市| 洪江市| 高清| 安岳县| 剑河县| 郸城县| 洞头县| 如皋市| 海原县| 方城县| 日喀则市| 江达县| 侯马市| 大埔县| 邓州市| 四平市| 社旗县| 溆浦县| 云梦县| 湛江市| 舒兰市| 江西省| 平舆县| 威海市| 九江县| 颍上县| 日土县| 双牌县| 阿瓦提县|