PostgreSQL教程FG105-PG逻辑备份pg_dump实战教程
本文档详细介绍PostgreSQL数据库逻辑备份工具pg_dump的使用方法,包括全库备份、表级备份、数据恢复等操作,风哥教程参考PostgreSQL官方文档Backup and Restore内容,适合DBA在日常运维工作中使用。
Part01-基础概念与理论知识
1.1 PostgreSQL逻辑备份概念
PostgreSQL逻辑备份是指将数据库对象和数据导出为SQL脚本或归档文件的过程。逻辑备份可以备份整个数据库、指定Schema或单个表,支持选择性备份和恢复。与物理备份相比,逻辑备份更灵活,可以跨版本、跨平台恢复数据。更多视频教程www.fgedu.net.cn
- 备份内容可读性强,便于检查和修改
- 支持选择性备份和恢复
- 可以跨版本、跨平台恢复
- 备份和恢复速度相对较慢
- 备份期间不影响数据库运行
- 适合中小型数据库的备份需求
1.2 PostgreSQL备份工具分类
# 1. pg_dump – 单数据库备份
# – 备份单个数据库
# – 支持多种输出格式
# – 支持并行备份
# – 最常用的逻辑备份工具
# 2. pg_dumpall – 全实例备份
# – 备份整个数据库实例
# – 包含角色、表空间等全局对象
# – 只支持SQL文本格式
# – 适合迁移和克隆环境
# 3. pg_basebackup – 物理备份
# – 备份整个数据目录
# – 支持增量备份
# – 适合大型数据库
# – 恢复速度快
# 4. 第三方工具
# – pgBackRest
# – Barman
# – WAL-G
# – 提供更强大的备份管理功能
# 输出格式对比
| 格式 | 工具 | 特点 | 适用场景 |
|———|————-|————————|—————|
| plain | pg_dump | SQL文本,可读性强 | 小型数据库 |
| custom | pg_dump | 自定义格式,支持并行 | 中型数据库 |
| directory| pg_dump | 目录格式,支持并行 | 大型数据库 |
| tar | pg_dump | tar归档格式 | 归档传输 |
1.3 pg_dump常用参数说明
pg_dump常用参数:
- -h/–host:数据库服务器主机名
- -p/–port:数据库服务器端口
- -U/–username:连接用户名
- -d/–dbname:数据库名称
- -F/–format:输出格式(p/c/d/t)
- -f/–file:输出文件名
- -t/–table:指定备份的表
- -n/–schema:指定备份的Schema
- -j/–jobs:并行工作进程数
- -Z/–compress:压缩级别
Part02-生产环境规划与建议
2.1 PostgreSQL备份策略规划
# 1. 备份类型选择
# 小型数据库(< 10GB):pg_dump逻辑备份
# 中型数据库(10GB - 100GB):pg_dump + pg_basebackup
# 大型数据库(> 100GB):pg_basebackup + WAL归档
# 2. 备份频率规划
# 全量备份:每天一次
# 增量备份:每小时一次(WAL归档)
# 表级备份:根据业务需求
# 3. 备份保留策略
# 日备份保留:7天
# 周备份保留:4周
# 月备份保留:12个月
# 年备份保留:3年
# 4. 备份验证策略
# 每周验证一次备份可用性
# 每月进行一次恢复演练
# 记录备份验证结果
# 5. 备份存储策略
# 本地存储:最近7天的备份
# 异地存储:所有备份的副本
# 云存储:重要备份的归档
2.2 PostgreSQL备份调度规划
PostgreSQL备份调度规划:
- 全库备份:每天凌晨2:00执行
- 表级备份:重要表每天备份多次
- WAL归档:持续进行
- 备份清理:每天凌晨4:00执行
- 备份验证:每周日凌晨5:00执行
2.3 PostgreSQL备份存储规划
# 1. 目录结构
/postgresql/backup/
├── daily/ # 日备份
│ ├── 2026-04-01/
│ ├── 2026-04-02/
│ └── 2026-04-03/
├── weekly/ # 周备份
│ ├── week01/
│ └── week02/
├── monthly/ # 月备份
│ ├── 2026-01/
│ └── 2026-02/
├── archive/ # WAL归档
│ └── 000000010000000000000001
└── scripts/ # 备份脚本
├── full_backup.sh
├── table_backup.sh
└── backup_clean.sh
# 2. 存储空间估算
# 日备份数据量 = 数据库大小 * 压缩率
# 保留空间 = 日备份数据量 * 保留天数 * 1.5
# 3. 存储介质选择
# 本地磁盘:高速访问,临时存储
# NAS存储:大容量,长期存储
# 云存储:异地容灾,归档存储
Part03-生产环境项目实施方案
3.1 PostgreSQL全库备份实战
3.1.1 SQL文本格式备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F p -f /postgresql/backup/daily/fgedudb_$(date +%Y%m%d).sql
# 执行过程输出
Password:
$ ls -lh /postgresql/backup/daily/fgedudb_20260407.sql
-rw-r–r– 1 pgsql fgedudb 512M Apr 7 02:00 /postgresql/backup/daily/fgedudb_20260407.sql
# 查看备份文件内容
$ head -50 /postgresql/backup/daily/fgedudb_20260407.sql
—
— PostgreSQL database dump
—
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = ‘UTF8’;
SET standard_conforming_strings = on;
—
— Name: fgedu; Type: SCHEMA; Schema: -; Owner: fgedu
—
CREATE SCHEMA fgedu;
…
# 备份整个数据库实例(包含角色和表空间)
$ pg_dumpall -h fgedu.localhost -p 5432 -U fgedu -f /postgresql/backup/daily/all_databases_$(date +%Y%m%d).sql
# 查看备份文件大小
$ ls -lh /postgresql/backup/daily/all_databases_20260407.sql
-rw-r–r– 1 pgsql fgedudb 1.2G Apr 7 02:30 /postgresql/backup/daily/all_databases_20260407.sql
# 压缩备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F p | gzip > /postgresql/backup/daily/fgedudb_$(date +%Y%m%d).sql.gz
$ ls -lh /postgresql/backup/daily/fgedudb_20260407.sql.gz
-rw-r–r– 1 pgsql fgedudb 128M Apr 7 02:15 /postgresql/backup/daily/fgedudb_20260407.sql.gz
3.1.2 自定义格式备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F c -f /postgresql/backup/daily/fgedudb_$(date +%Y%m%d).dump
$ ls -lh /postgresql/backup/daily/fgedudb_20260407.dump
-rw-r–r– 1 pgsql fgedudb 256M Apr 7 02:00 /postgresql/backup/daily/fgedudb_20260407.dump
# 自定义格式支持压缩
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F c -Z 9 -f /postgresql/backup/daily/fgedudb_$(date +%Y%m%d)_z9.dump
$ ls -lh /postgresql/backup/daily/fgedudb_20260407_z9.dump
-rw-r–r– 1 pgsql fgedudb 128M Apr 7 02:10 /postgresql/backup/daily/fgedudb_20260407_z9.dump
# 查看备份文件内容
$ pg_restore -l /postgresql/backup/daily/fgedudb_20260407.dump | head -50
;
; Archive created at 2026-04-07 02:00:00
; dbname: fgedudb
; TOC Entries: 256
; Compression: -1
;
; Selected TOC Entries:
;
3264; 1262 16384 DATABASE – fgedu fgedu
3; 2615 16385 SCHEMA – fgedu fgedu
3265; 0 0 COMMENT – SCHEMA fgedu fgedu
…
# 只备份结构(不含数据)
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F c –schema-only -f /postgresql/backup/daily/fgedudb_schema_$(date +%Y%m%d).dump
# 只备份数据(不含结构)
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F c –data-only -f /postgresql/backup/daily/fgedudb_data_$(date +%Y%m%d).dump
3.1.3 目录格式并行备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F d -j 4 -f /postgresql/backup/daily/fgedudb_$(date +%Y%m%d)_dir
$ ls -la /postgresql/backup/daily/fgedudb_20260407_dir/
total 524288
drwx—— 2 pgsql fgedudb 4096 Apr 7 02:00 .
drwxr-xr-x 3 pgsql fgedudb 4096 Apr 7 02:00 ..
-rw——- 1 pgsql fgedudb 16384 Apr 7 02:00 3264.dat.gz
-rw——- 1 pgsql fgedudb 32768 Apr 7 02:00 3265.dat.gz
-rw——- 1 pgsql fgedudb 262144 Apr 7 02:00 3266.dat.gz
-rw——- 1 pgsql fgedudb 256 Apr 7 02:00 toc.dat
# 查看备份大小
$ du -sh /postgresql/backup/daily/fgedudb_20260407_dir/
256M /postgresql/backup/daily/fgedudb_20260407_dir/
# 并行备份时间对比
# 单线程备份:30分钟
# 4线程并行备份:10分钟
# 带压缩的并行备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F d -j 4 -Z 9 -f /postgresql/backup/daily/fgedudb_$(date +%Y%m%d)_dir_z9
$ du -sh /postgresql/backup/daily/fgedudb_20260407_dir_z9/
128M /postgresql/backup/daily/fgedudb_20260407_dir_z9/
3.2 PostgreSQL表级备份实战
3.2.1 单表备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t fgedu_orders -F c -f /postgresql/backup/daily/fgedu_orders_$(date +%Y%m%d).dump
$ ls -lh /postgresql/backup/daily/fgedu_orders_20260407.dump
-rw-r–r– 1 pgsql fgedudb 64M Apr 7 02:00 /postgresql/backup/daily/fgedu_orders_20260407.dump
# 多表备份
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t fgedu_orders -t fgedu_customers -t fgedu_products -F c -f /postgresql/backup/daily/fgedu_tables_$(date +%Y%m%d).dump
# 使用通配符备份表
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t ‘fgedu_order_*’ -F c -f /postgresql/backup/daily/fgedu_order_tables_$(date +%Y%m%d).dump
# 备份指定Schema
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -n fgedu -F c -f /postgresql/backup/daily/fgedu_schema_$(date +%Y%m%d).dump
# 排除某些表
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -T fgedu_logs -T fgedu_temp_* -F c -f /postgresql/backup/daily/fgedudb_no_logs_$(date +%Y%m%d).dump
# 备份表结构
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t fgedu_orders –schema-only -f /postgresql/backup/daily/fgedu_orders_schema.sql
$ cat /postgresql/backup/daily/fgedu_orders_schema.sql
—
— PostgreSQL database dump
—
SET statement_timeout = 0;
SET lock_timeout = 0;
CREATE TABLE fgedu_orders (
order_id SERIAL PRIMARY KEY,
order_no VARCHAR(50) NOT NULL,
customer_id INTEGER,
status VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX fgedu_orders_idx01 ON fgedu_orders (customer_id);
CREATE INDEX fgedu_orders_idx02 ON fgedu_orders (created_at);
3.2.2 条件备份数据
$ psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -c “\COPY (SELECT * FROM fgedu_orders WHERE created_at >= ‘2026-01-01’) TO ‘/postgresql/backup/daily/fgedu_orders_2026.csv’ WITH CSV HEADER”
$ ls -lh /postgresql/backup/daily/fgedu_orders_2026.csv
-rw-r–r– 1 pgsql fgedudb 32M Apr 7 02:00 /postgresql/backup/daily/fgedu_orders_2026.csv
# 使用查询导出数据
$ psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -c “\COPY (SELECT order_id, order_no, customer_id FROM fgedu_orders WHERE status = ‘completed’) TO ‘/postgresql/backup/daily/fgedu_orders_completed.csv’ WITH CSV HEADER”
# 导出为INSERT语句
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t fgedu_orders –column-inserts -f /postgresql/backup/daily/fgedu_orders_inserts.sql
$ head -20 /postgresql/backup/daily/fgedu_orders_inserts.sql
—
— PostgreSQL database dump
—
INSERT INTO fgedu_orders (order_id, order_no, customer_id, status, created_at) VALUES (1, ‘ORD20260101001’, 1001, ‘completed’, ‘2026-01-01 10:00:00’);
INSERT INTO fgedu_orders (order_id, order_no, customer_id, status, created_at) VALUES (2, ‘ORD20260101002’, 1002, ‘pending’, ‘2026-01-01 10:05:00’);
…
# 使用pg_dump导出特定条件的数据(通过视图)
fgedudb=# CREATE VIEW fgedu_orders_2026 AS SELECT * FROM fgedu_orders WHERE created_at >= ‘2026-01-01’;
CREATE VIEW
$ pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -t fgedu_orders_2026 -F c -f /postgresql/backup/daily/fgedu_orders_2026_view.dump
fgedudb=# DROP VIEW fgedu_orders_2026;
DROP VIEW
3.3 PostgreSQL数据恢复实战
3.3.1 恢复SQL文本备份
$ psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -f /postgresql/backup/daily/fgedudb_20260407.sql
# 执行过程输出
SET
SET
SET
psql:/postgresql/backup/daily/fgedudb_20260407.sql:22: ERROR: relation “fgedu_orders” already exists
…
# 恢复到新数据库
$ createdb -h fgedu.localhost -p 5432 -U fgedu fgedudb_restore
$ psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore -f /postgresql/backup/daily/fgedudb_20260407.sql
SET
SET
SET
CREATE SCHEMA
CREATE TABLE
…
# 恢复压缩的SQL备份
$ gunzip -c /postgresql/backup/daily/fgedudb_20260407.sql.gz | psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore
# 恢复整个实例
$ psql -h fgedu.localhost -p 5432 -U fgedu -f /postgresql/backup/daily/all_databases_20260407.sql
# 只恢复特定表的数据
$ sed -n ‘/COPY fgedu_orders/,/^\./p’ /postgresql/backup/daily/fgedudb_20260407.sql | psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb
3.3.2 使用pg_restore恢复
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore /postgresql/backup/daily/fgedudb_20260407.dump
# 恢复前先创建数据库
$ createdb -h fgedu.localhost -p 5432 -U fgedu fgedudb_restore
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore /postgresql/backup/daily/fgedudb_20260407.dump
# 并行恢复
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore -j 4 /postgresql/backup/daily/fgedudb_20260407.dump
# 只恢复结构
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore –schema-only /postgresql/backup/daily/fgedudb_20260407.dump
# 只恢复数据
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore –data-only /postgresql/backup/daily/fgedudb_20260407.dump
# 只恢复特定表
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore -t fgedu_orders /postgresql/backup/daily/fgedudb_20260407.dump
# 查看备份内容列表
$ pg_restore -l /postgresql/backup/daily/fgedudb_20260407.dump > /tmp/toc.list
# 编辑toc.list选择要恢复的对象
$ vi /tmp/toc.list
; 取消注释要恢复的对象
# 使用过滤列表恢复
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore -L /tmp/toc.list /postgresql/backup/daily/fgedudb_20260407.dump
# 恢复目录格式备份
$ pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_restore -j 4 /postgresql/backup/daily/fgedudb_20260407_dir
Part04-生产案例与实战讲解
4.1 PostgreSQL自动备份脚本案例
# pg_dump_backup.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# PostgreSQL自动备份脚本
# 配置变量
PGHOME=/postgresql/fgapp
PGHOST=fgedu.localhost
PGPORT=5432
PGUSER=fgedu
PGDATABASE=fgedudb
BACKUP_DIR=/postgresql/backup/daily
LOG_FILE=/postgresql/scripts/logs/pg_dump_backup.log
RETENTION_DAYS=7
# 日志函数
log_message() {
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” >> $LOG_FILE
}
# 创建备份目录
create_backup_dir() {
BACKUP_DATE=$(date +%Y%m%d)
BACKUP_PATH=$BACKUP_DIR/$BACKUP_DATE
mkdir -p $BACKUP_PATH
chmod 750 $BACKUP_PATH
}
# 执行全库备份
do_full_backup() {
log_message “开始执行全库备份…”
local backup_file=$BACKUP_PATH/fgedudb_full.dump
$PGHOME/bin/pg_dump -h $PGHOST -p $PGPORT -U $PGUSER -d $PGDATABASE \
-F c -Z 6 -f $backup_file >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
local size=$(ls -lh $backup_file | awk ‘{print $5}’)
log_message “全库备份完成: $backup_file, 大小: $size”
else
log_message “ERROR: 全库备份失败”
return 1
fi
}
# 执行表级备份
do_table_backup() {
log_message “开始执行重要表备份…”
for table in fgedu_orders fgedu_customers fgedu_products; do
local backup_file=$BACKUP_PATH/${table}.dump
$PGHOME/bin/pg_dump -h $PGHOST -p $PGPORT -U $PGUSER -d $PGDATABASE \
-t $table -F c -f $backup_file >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
log_message “表备份完成: $table”
else
log_message “ERROR: 表备份失败: $table”
fi
done
}
# 清理过期备份
cleanup_old_backups() {
log_message “开始清理过期备份…”
find $BACKUP_DIR -type d -name “20*” -mtime +$RETENTION_DAYS -exec rm -rf {} \;
log_message “过期备份清理完成”
}
# 发送告警
send_alert() {
local message=$1
/postgresql/scripts/alert/send_dingtalk.sh “$message”
}
# 主函数
main() {
log_message “==========================================”
log_message “开始执行PostgreSQL备份”
log_message “==========================================”
create_backup_dir
if do_full_backup && do_table_backup; then
log_message “备份成功完成”
cleanup_old_backups
else
log_message “ERROR: 备份过程中出现错误”
send_alert “【告警】PostgreSQL备份失败,请检查日志”
fi
log_message “==========================================”
log_message “备份任务结束”
log_message “==========================================”
}
main
4.2 PostgreSQL并行备份案例
# 场景:fgedudb数据库大小50GB,需要快速备份
# 1. 单线程备份时间测试
$ time pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F c -f /postgresql/backup/test_single.dump
real 30m15.123s
user 25m30.456s
sys 4m45.678s
# 2. 4线程并行备份时间测试
$ time pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F d -j 4 -Z 6 -f /postgresql/backup/test_parallel
real 10m25.456s
user 35m20.789s
sys 5m05.123s
# 3. 8线程并行备份时间测试
$ time pg_dump -h fgedu.localhost -p 5432 -U fgedu -d fgedudb -F d -j 8 -Z 6 -f /postgresql/backup/test_parallel8
real 6m15.789s
user 40m15.456s
sys 6m00.123s
# 4. 查看备份结果
$ du -sh /postgresql/backup/test_*
15G /postgresql/backup/test_single.dump
15G /postgresql/backup/test_parallel
15G /postgresql/backup/test_parallel8
# 5. 并行恢复测试
$ createdb -h fgedu.localhost -p 5432 -U fgedu fgedudb_test
$ time pg_restore -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_test -j 4 /postgresql/backup/test_parallel
real 8m30.456s
user 5m20.789s
sys 3m10.123s
# 6. 验证恢复数据
$ psql -h fgedu.localhost -p 5432 -U fgedu -d fgedudb_test -c “SELECT count(*) FROM fgedu_orders”
count
——–
500000
(1 row)
4.3 PostgreSQL备份验证案例
# backup_verify.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# PostgreSQL备份验证脚本
PGHOME=/postgresql/fgapp
PGHOST=fgedu.localhost
PGPORT=5432
PGUSER=fgedu
BACKUP_FILE=$1
TEST_DB=fgedudb_verify_test
LOG_FILE=/postgresql/scripts/logs/backup_verify.log
log_message() {
echo “$(date ‘+%Y-%m-%d %H:%M:%S’) – $1” >> $LOG_FILE
}
# 验证备份文件
verify_backup_file() {
log_message “验证备份文件: $BACKUP_FILE”
if [ ! -f “$BACKUP_FILE” ]; then
log_message “ERROR: 备份文件不存在”
return 1
fi
# 检查文件大小
local size=$(ls -lh $BACKUP_FILE | awk ‘{print $5}’)
log_message “备份文件大小: $size”
# 检查备份内容
$PGHOME/bin/pg_restore -l $BACKUP_FILE > /dev/null 2>&1
if [ $? -eq 0 ]; then
log_message “备份文件格式正确”
else
log_message “ERROR: 备份文件格式错误”
return 1
fi
}
# 创建测试数据库
create_test_db() {
log_message “创建测试数据库: $TEST_DB”
$PGHOME/bin/dropdb -h $PGHOST -p $PGPORT -U $PGUSER $TEST_DB 2>/dev/null
$PGHOME/bin/createdb -h $PGHOST -p $PGPORT -U $PGUSER $TEST_DB
}
# 恢复测试
do_restore_test() {
log_message “开始恢复测试…”
$PGHOME/bin/pg_restore -h $PGHOST -p $PGPORT -U $PGUSER -d $TEST_DB $BACKUP_FILE >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
log_message “恢复测试成功”
else
log_message “ERROR: 恢复测试失败”
return 1
fi
}
# 数据验证
verify_data() {
log_message “验证恢复数据…”
# 检查表数量
local table_count=$($PGHOME/bin/psql -h $PGHOST -p $PGPORT -U $PGUSER -d $TEST_DB -t -c ”
SELECT count(*) FROM information_schema.tables WHERE table_schema = ‘fgedu’;
” | tr -d ‘ ‘)
log_message “恢复表数量: $table_count”
# 检查数据量
local row_count=$($PGHOME/bin/psql -h $PGHOST -p $PGPORT -U $PGUSER -d $TEST_DB -t -c ”
SELECT sum(n_live_tup) FROM pg_stat_user_tables;
” | tr -d ‘ ‘)
log_message “恢复数据行数: $row_count”
}
# 清理测试数据库
cleanup_test_db() {
log_message “清理测试数据库…”
$PGHOME/bin/dropdb -h $PGHOST -p $PGPORT -U $PGUSER $TEST_DB
}
# 主函数
main() {
if [ -z “$BACKUP_FILE” ]; then
echo “Usage: $0
exit 1
fi
log_message “==========================================”
log_message “开始备份验证”
log_message “==========================================”
verify_backup_file && \
create_test_db && \
do_restore_test && \
verify_data
cleanup_test_db
log_message “==========================================”
log_message “备份验证完成”
log_message “==========================================”
}
main
Part05-风哥经验总结与分享
5.1 PostgreSQL备份最佳实践
PostgreSQL备份最佳实践:
- 定期备份:建立自动化的备份机制
- 多种备份:结合逻辑备份和物理备份
- 备份验证:定期验证备份可用性
- 异地存储:备份文件存储到异地
- 加密备份:敏感数据备份要加密
- 文档记录:记录备份策略和恢复流程
5.2 PostgreSQL备份脚本库
/postgresql/scripts/backup/
├── pg_dump_backup.sh # 全库备份脚本
├── pg_dump_table.sh # 表级备份脚本
├── pg_dump_schema.sh # Schema备份脚本
├── pg_dumpall.sh # 实例备份脚本
├── backup_verify.sh # 备份验证脚本
├── backup_clean.sh # 备份清理脚本
├── backup_report.sh # 备份报告脚本
└── conf/
└── backup.conf # 备份配置文件
5.3 PostgreSQL备份检查清单
# 备份前检查
– [ ] 确认磁盘空间充足
– [ ] 确认备份目录权限正确
– [ ] 确认数据库连接正常
– [ ] 确认备份参数正确
# 备份中监控
– [ ] 监控备份进度
– [ ] 监控磁盘空间
– [ ] 监控系统资源
– [ ] 记录备份日志
# 备份后验证
– [ ] 验证备份文件完整性
– [ ] 验证备份文件大小
– [ ] 验证备份内容正确
– [ ] 记录备份信息
# 定期检查
– [ ] 检查备份保留策略
– [ ] 检查备份存储空间
– [ ] 检查备份恢复测试
– [ ] 检查备份文档更新
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
