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

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

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

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

一、物理備份基礎(chǔ)概念

1.1 什么是物理備份?

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

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

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

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

1.2 物理備份的前提條件

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

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

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

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

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

基本語法

pg_basebackup [選項] -D <目標(biāo)目錄>

常用選項說明

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

實戰(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 恢復(fù),但不能直接啟動為從庫(缺少 standby.signal)。

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

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

以 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 壓力;
  • 依賴特定存儲技術(shù);
  • 需手動處理 WAL 歸檔一致性(建議配合 pg_start_backup() / pg_stop_backup())。

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

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

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

3.1 環(huán)境準備

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

前提:

  • 主庫已配置流復(fù)制(見下文);
  • 從庫已安裝相同版本 PostgreSQL;
  • 網(wǎng)絡(luò)互通,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

# 允許復(fù)制連接
host replication repuser 192.168.10.51/32 md5

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

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:清空數(shù)據(jù)目錄

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

關(guān)鍵選項解釋

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

步驟 4:驗證生成的文件

  • /var/lib/pgsql/14/data/standby.signal(空文件,標(biāo)識為從庫);
  • postgresql.auto.conf 內(nèi)容示例:
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í)行:

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

在主庫執(zhí)行:

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

關(guān)鍵字段:

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

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

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

4.1 配置 WAL 歸檔(主庫)

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

確保 /archive/wal/ 目錄存在且 PostgreSQL 有寫權(quán)限。

4.2 恢復(fù)流程

停止 PostgreSQL

pg_ctl stop -D $PGDATA

清理原數(shù)據(jù)目錄

rm -rf $PGDATA/*

還原物理備份

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

創(chuàng)建 recovery.signal

touch $PGDATA/recovery.signal

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

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

啟動數(shù)據(jù)庫

pg_ctl start -D $PGDATA

數(shù)據(jù)庫將重放 WAL 至目標(biāo)時間點,然后自動轉(zhuǎn)為主庫模式。

五、高級技巧與最佳實踐

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

復(fù)制槽可防止主庫在從庫斷連時清理 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、網(wǎng)絡(luò)
從庫啟動報錯 “WAL ends before end of backup”備份期間主庫重啟使用 -X stream 或確保 WAL 歸檔完整
從庫延遲高網(wǎng)絡(luò)慢、主庫負載高監(jiān)控 pg_stat_replication,優(yōu)化硬件
無法寫入從庫正常行為從庫為只讀,需 promote 后才可寫

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

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

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

總結(jié):PostgreSQL 物理備份是構(gòu)建高可用、實現(xiàn)災(zāi)難恢復(fù)的基石。通過 pg_basebackup,可一鍵完成:

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

關(guān)鍵要點:

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

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

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

相關(guān)文章

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

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

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

    PostgreSQL中JSONB的使用與踩坑指南

    文章介紹了PostgreSQL中JSONB的使用,包括JSONB的基礎(chǔ)操作、索引策略、數(shù)組操作和批量更新,文章通過實例詳細講解了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)在不同的數(shù)據(jù)庫之間進行通信和交互,下面就一起來了解一下
    2025-06-06
  • Postgresql 實現(xiàn)查詢一個表/所有表的所有列名

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

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

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

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

    PostgreSQL13基于流復(fù)制搭建后備服務(wù)器的方法

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

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

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

    PostgreSQL?auto_explain的具體使用

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

    PostgreSQL核心原理之?dāng)?shù)據(jù)庫偶爾會卡頓的原因分析

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

最新評論

通道| 牙克石市| 望奎县| 永新县| 石河子市| 青川县| 平定县| 准格尔旗| 成武县| 讷河市| 罗甸县| 朝阳县| 松桃| 和平区| 富蕴县| 黄龙县| 秀山| 长寿区| 社会| 青海省| 二连浩特市| 驻马店市| 韩城市| 抚松县| 姜堰市| 泾川县| 来宾市| 连州市| 呼伦贝尔市| 光山县| 东城区| 堆龙德庆县| 夏河县| 宜都市| 阜南县| 涿鹿县| 北海市| 固始县| 城市| 永德县| 永清县|