๐ง PostgreSQL ้ซๆ่ฝๅไปฝ็ญ็ฅ:pg_dump / pg_dumpall / pg_basebackup / PITR ๅ จๆฏ่ผ่ๆไฝณๅฏฆๅๆๅ
PostgreSQL ็ๅไปฝๆฉๅถๅ่ฝๅผทๅคง,ไฝๅฝๆง้ซไนๆๅณ่่ค้ๅบฆ้ซ。
่จฑๅคไบบๆๅ:ๅฐๅบ่ฉฒ็จ pg_dump、pg_dumpall、pg_basebackup,้ๆฏ็ดๆฅไธ PITR(Point In Time Recovery)?
ๆฌ็ฏๅฎๆด่งฃๆๆฏไธ็จฎๅไปฝๆนๅผ็็นๆง、ๆ่ฝๅฝฑ้ฟ、ๅช็ผบ้ป่้ฉ็จๆ
ๅข,ไธฆๆไพไผๆฅญ็ดๅไปฝ/้ๅ็ฏๆฌ่ๆไปค,ๅฏๆญ้
ไฝ ๅ
ๅ 50 ่ฌ็ญ่ณๆๅฏฆ้ฉ็ตๆ้็จๆผๅฏฆ้ๅฐๆก(sitemap ๅทฒๆถ้:pg500k ๅบๆบๆธฌ่ฉฆ):contentReference[oaicite:2]{index=2}。
๐ ไธ、ๅ จๅไปฝๆนๅผ็ธฝ่ฆฝ:็ฉ็ vs ้่ผฏ
PostgreSQL ๅไปฝๅๆๅ ฉๅคง้ก:
| ๆนๅผ | ้กๅ | ๆ่ฟฐ | ้ฉ็จๆ ๅข |
|---|---|---|---|
| pg_dump | ้่ผฏ | ๅฎไธ่ณๆๅบซๅฏๅบ(schema + data) | ้จๅๅไปฝ、่ทจ็ๆฌ้ท็งป、่ณๆ็ฏไพๅฏๅบ |
| pg_dumpall | ้่ผฏ | ๆดๅ PostgreSQL cluster ๅฏๅบ(ๅซ roles) | ๅฐๅ็ณป็ตฑๅฎๆดๅฏๅบ |
| pg_basebackup | ็ฉ็ | ๅฎๆดๅไปฝ data directory(base + pg_wal) | HA、ๅๆด、ๅปบ็ซ replica、ๆฅๅธธไพ่กๅไปฝ |
| PITR | ็ฉ็ + WAL | ๅๅพฉๅฐไปปๆๆ้้ป,้ WAL ๆ็บๅไปฝ | ้่、ๆฏไป็ณป็ตฑ、ไธๅฏๆฅๅ่ณๆ้บๅคฑ |
ๆ ธๅฟ็ต่ซ: ่ฅไฝ ๆฏไธ่ฌๆๅ → ๆฏๆฅ pg_basebackup + WAL ๅณๅฏ。 ่ฅไฝ ๆฏๅคงๅไผๆฅญ → ๅฟ ๅ PITR。 ่ฅไฝ ่ฆ่ทจ็ๆฌ → pg_dump。
๐ ไบ、pg_dump:ๆๅธธ็จ็้่ผฏๅไปฝ
้ฉๅ้จๅ่ณๆๅบซๅไปฝๆ่ทจ็ๆฌๅ็ด,ไพๅฆ:PostgreSQL 13 → 17。
1. ๅฏๅบๅฎไธ DB
pg_dump -U postgres -d mydb -F c -f mydb.dump
- -F c:Custom ๆ ผๅผ,ๅฏ็จ pg_restore ้ๅ
- -j:ๅฏๅคๅทฅ,ๆ้ซๆ่ฝ(ๅคง่ณๆๅบซๅฟ ็จ)
2. ๅคๅทฅๅไปฝ
pg_dump -U postgres -d mydb -F c -j 8 -f mydb.dump
3. ้ๅ
pg_restore -U postgres -d newdb -j 8 mydb.dump
้่ผฏๅไปฝ็น้ป:
- ่ทจ็ๆฌ็ธๅฎน
- ๅฏ้ธๆๆงๅไปฝ table/schema
- ไธๅซๅ จ็ณป็ตฑ่ณ่จ(ๅฆ roles)
๐ฆ ไธ、pg_dumpall:ๅฎๆด้่ผฏๅไปฝ(ๅซ roles)
ๅฏๆๆดๅ PostgreSQL cluster(ๅค DB + roles)ๅฏๅบๆไธๅๅฏ่ฎ SQL。
pg_dumpall -U postgres > full_backup.sql
้ฉๅ:
- ๅฐๅ็ณป็ตฑ
- ๆธฌ่ฉฆ็ฐๅขๆฌ็งป
- ๅไปฝ roles ่ global objects(pg_dump ไธๆๅไปฝ)
ไธ้ฉๅ:
- ๅคงๅ่ณๆๅบซ(SQL ๆขๅพฉ้ๅบฆๆ ข)
- ้่ฆๆ็บ WAL ็ๅ ดๆฏ(ๆฒๆ WAL)
๐ ๅ、pg_basebackup:ไผๆฅญๆๅธธ็จ็็ฉ็ๅไปฝ
็ดๆฅ่ค่ฃฝ PostgreSQL data directory,้ฉๅ:
- ๅๆดๅปบ็ซ(replica)
- HA(ไพๅฆ Patroni、repmgr)
- ๆฅๅธธๅฎๆๅไปฝ
1. ๅบๆฌๅไปฝ
pg_basebackup -U replica -D /backup/2025-12-03 -Fp -Xs -P
ๅๆธ่ชชๆ:
- -Fp:Plain ๆ ผๅผ(ๆ -Ft tar)
- -Xs:ๅ ๅซ WAL
- -P:้กฏ็คบ้ฒๅบฆ
2. ไฝฟ็จๅฃ็ธฎๅไปฝ(PostgreSQL 15+)
pg_basebackup -U replica -D backup -Ft -z -Z 6
3. ๅปบ็ซ replica(ๆๅธธ็จ)
pg_basebackup -h primary -D /var/lib/postgresql/17/main \
-R -U replica -P -Fp -Xs
ๅฎๆๅพ่ชๅ็ข็ replica ่จญๅฎ(standby.signal)。
๐ ไบ、PITR — Point In Time Recovery
PITR ๆฏๅฐ restore ๆบ็ขบๅๅฐ「ไปปๆ็ง」็ๆ่ก,ๆฏไผๆฅญไธๅฏๆ็ผบ็ๅๆด็ญ็ฅ。 ๅฐคๅ ถ็ถไฝ ่ชคๅช่ณๆ、UPDATE ้ฏ่ชค、DROP TABLE、่ณๆ่ขซๆฑๆๆ,ๅชๆ PITR ่ฝๆ。
ๅ็จ WAL ๅไปฝ
ไฟฎๆน postgresql.conf:archive_mode = on
archive_command = 'cp %p /archived_wal/%f'
wal_level = replica
max_wal_senders = 10
่งธ็ผๅไปฝ(ไพ PITR ไฝฟ็จ)
SELECT pg_start_backup('daily_backup');
ๅไปฝ็ฉ็่ณๆ(็จ pg_basebackup ๆ rsync)。
SELECT pg_stop_backup();
้ฒ่ก้ๅๅฐ็นๅฎ็ง
ๅจ recovery.conf(ๆ postgresql.auto.conf)ๅ ๅ ฅ:restore_command = 'cp /archived_wal/%f %p'
recovery_target_time = '2025-12-03 13:12:45'
ๅๅ PostgreSQL:
pg_ctl start
่ณๆๅบซๅฐ่ชๅ replay WAL ๅๅฐๆๅฎ็ง。
๐ ๅ ญ、ๆ่ฝๆฏ่ผ:ๅช็จฎๆนๅผๆๅฟซ?(้็จๅบๆบ)
ไปฅไฝ ๅทฒๅปบ็ซ็ 50 ่ฌ็ญๆธฌ่ฉฆ่ณๆ้็ด็บๆจๆบ(ๅ่ sitemap):contentReference[oaicite:3]{index=3}。
| ๆนๅผ | ๅไปฝ้ๅบฆ | ้ๅ้ๅบฆ | ๆฏๆด่ทจ็ๆฌ | ้ฉ็จๆ ๅข |
|---|---|---|---|---|
| pg_dump | ไธญ | ไธญ~ๆ ข | ✔ | ้จๅ่กจ / schema ๅฏๅบ、้ท็งป |
| pg_dumpall | ๆ ข | ๆ ข | ✔ | ๅฐ็ณป็ตฑๅ จๅ |
| pg_basebackup | ๅฟซ | ๅฟซ | ✘ | HA、ๆฅๅธธๅไปฝ、replica ๅปบ็ซ |
| PITR | ๅฟซ | ๅฟซ~ไธญ(็ WAL) | ✘ | ้่、ๆฏไป、้่ฆ็ณป็ตฑ |
ๅฆๆไฝ ่ฆๅปบ็ซ HA ๆ replica:pg_basebackup ๅฟ
็จ
ๅฆๆไฝ ่ฆ่ทจ็ๆฌ:pg_dump ๅฟ
็จ
ๅฆๆไฝ ่ฆ็ฒพๆบๅฐไปปๆๆ้็ง:PITR ๆฏๅฏไธ้ธๆ
๐ก ไธ、ไผๆฅญ็ดๅไปฝ็ญ็ฅ่จญ่จ(ๅผท็ๅปบ่ญฐ)
ไปฅไธๆฏๆ็ฉฉๅฅ็ๅฏฆๅ็ญ็ฅ:
ๆฏๆฅ :pg_basebackup(ๅฎๆด็ฉ็ๅไปฝ)
ๆฏ 5 ๅ้ :WAL ๅไปฝ(PITR)
ๆฏ้ฑ :pg_dump(้้ต่กจ)
ๆฏ้ฑ :ๅฎๆด้ๅๆผ็ทด
็ฐๅฐๅไปฝ :S3 / NFS / PBS / rsync
่ชๅๅ :systemd + cron + shell script
่ณๆๅบซๅไปฝไธๆฏ「ๅไบ」ๅฐฑ็ฎ,่ๆฏ:
ไฝ ๅฟ ้ ่ฝๆๅ้ๅ → ๅไปฝๆ็ฎๆ็ซ。
๐งช ๅ ซ、ไฝ ๅฏ็ดๆฅไฝฟ็จ็ๅไปฝ่ ณๆฌ็ฏๆฌ(ๅฏๆพ cron)
1. pg_basebackup ่ชๅๅไปฝ่ ณๆฌ
#!/bin/bash
DATE=$(date +"%Y-%m-%d")
DEST="/backup/pg/$DATE"
pg_basebackup -U replica -D $DEST -Fp -Xs -P -R
find /backup/pg/ -type d -mtime +7 -exec rm -rf {} \;
2. WAL ๅไปฝ่ผชๆฟ่ ณๆฌ
#!/bin/bash
ARCHIVE=/archived_wal
mkdir -p $ARCHIVE
find $ARCHIVE -type f -mtime +3 -exec rm {} \;
๐ฉน ไน、ๆ้ฏๆธ ๅฎ:ๅธธ่ฆๅ้ก่่็ๆนๅผ
- WAL ไธๆทๅข้ท? → archive_command ๆฒๆๅ。
- pg_basebackup ๅกไฝ? → max_wal_senders ไธๅค 。
- PITR ็กๆณๅๅพฉ? → restore_command ๆชๆญฃ็ขบๅ WAL。
- pg_dump ๅฏๅบ็ฐๅธธๆ ข? → ็ผบๅฐ -j ๅคๅทฅ。
- replica ็กๆณๅๆญฅ? → primary_conninfo ๆช่จญๅฎ。
๐ฌ ไบๅ็่จๅผๅฐ(ๅไปฝ่้ๅ่จ่ซๅ)
่ฅไฝ ๅจ PostgreSQL ๅไปฝ / ้ๅ、PITR ๆ pg_basebackup ้็จไธญ้ๅฐ:
- WAL ไธๅไปฝ、PITR ็กๆณ้ๅ
- pg_dump ๅทจ้่ณๆๅไปฝ้ๅบฆ้ๆ ข
- replica ๅปบ็ฝฎๅคฑๆๆๅๆญฅๅปถ้ฒ
- ่ทจ็ๆฌๅไปฝๅพ้ๅๅคฑๆ
ๆญก่ฟ็ดๆฅ็่จ่ฒผๅบๆไปค่้ฏ่ชค่จๆฏ,ๆๆๅๅฉๅๆไธฆๅฏ่ฝๆด็ๆ่ฃๅ ็ฏๅ ๅ ฅๆฌๆ。
๐ ๅปถไผธ้ฑ่ฎ
- ๐ PostgreSQL 50 ่ฌ็ญ่ณๆๅปบ็ซ่ๅไปฝ้ๅๆ่ฝๅฎๆดๅฏฆ้ฉ
- ๐งฑ Linux NFS ๅฎๆดๆๅ:ไผบๆๅจๆถ่จญ、ๆฌ้็ฎก็่ๆ่ฝ่ชฟๆ ก
- ๐ก Linux ็ฃๆงๅทฅๅ ทๅฎๆดๆๅ:top / htop / glances / nmon / dstat
- ๐ Proxmox VE ไผๆฅญ้จ็ฝฒ่ๅ:Cluster、Ceph、ZFS、HA、ๅไปฝๅ จๆป็ฅ
- ๐ Linux ๆชๆก็ณป็ตฑๆฏ่ผ:EXT4 / XFS / Btrfs / ZFS ๆทฑๅบฆ่งฃๆ
— WWFandy・PostgreSQL Backup Notes
ๆฒๆ็่จ:
ๅผต่ฒผ็่จ