1. 首页 > PostgreSQL教程 > 正文

PostgreSQL教程FG193-PG客户端应用详解:pg_basebackup/pg_controldata全参数

本文档详细介绍PostgreSQL物理备份工具pg_basebackup和控制数据查看工具pg_controldata的使用方法和参数说明,风哥教程参考PostgreSQL官方文档内容,适合数据库管理员在生产环境中使用这些工具进行数据库备份和控制信息查看。

Part01-基础概念与理论知识

1.1 物理备份概述

物理备份是指直接复制数据库文件的备份方式,与逻辑备份相比,物理备份具有备份速度快、恢复时间短的特点,适合大型数据库的备份。更多视频教程www.fgedu.net.cn

物理备份的优势:

  • 备份速度快,适合大型数据库
  • 恢复时间短,可快速恢复数据库
  • 支持增量备份,节省存储空间
  • 备份文件包含完整的数据库文件结构

1.2 pg_basebackup工具

pg_basebackup是PostgreSQL提供的物理备份工具,用于创建数据库集群的完整物理备份。它通过流式复制协议从主服务器获取数据,支持全量备份和增量备份。学习交流加群风哥微信: itpux-com

1.3 pg_controldata工具

pg_controldata是PostgreSQL提供的控制数据查看工具,用于查看数据库集群的控制信息,包括集群版本、检查点信息、WAL位置等重要参数。学习交流加群风哥QQ113257174

风哥提示:pg_basebackup是PostgreSQL中最常用的物理备份工具,而pg_controldata则是查看数据库集群控制信息的重要工具,两者都是数据库管理员日常工作的必备工具。

Part02-生产环境规划与建议

2.1 物理备份策略建议

— 物理备份策略建议

— 1. 全量备份
— – 每周执行一次全量备份
— – 选择业务低峰期执行
— – 备份文件保留至少一个月

— 2. 增量备份
— – 每天执行一次增量备份
— – 基于前一天的增量备份或全量备份
— – 备份文件保留一周

— 3. 备份频率
— – 对于重要数据库,可考虑每天执行全量备份
— – 对于超大数据库,可考虑每两周执行一次全量备份,每天执行增量备份

— 4. 备份验证
— – 每月至少验证一次备份的可恢复性
— – 定期检查备份文件的完整性

2.2 备份存储建议

备份存储建议:

  • 存储介质:使用独立的存储设备,如NAS、SAN或云存储
  • 存储位置:备份文件应存储在不同的物理位置,防止单点故障
  • 存储格式:使用压缩格式存储备份文件,节省存储空间
  • 存储安全:对备份文件进行加密,防止数据泄露
  • 存储管理:建立备份文件的生命周期管理,自动清理过期备份
风哥教程针对风哥教程针对生产环境建议:制定完善的备份存储策略,确保备份数据的安全和可访问性。from PostgreSQL视频:www.itpux.com

2.3 备份验证建议

备份验证建议:

  • 验证频率:每月至少验证一次备份的可恢复性
  • 验证方法:在测试环境中恢复备份,验证数据的完整性
  • 验证内容:检查备份文件的大小、完整性和可恢复性
  • 验证记录:记录备份验证的结果,建立验证报告
  • 告警机制:当备份验证失败时,及时发送告警通知

Part03-生产环境项目实施方案

3.1 pg_basebackup命令使用详解

3.1.1 pg_basebackup命令基本语法

— pg_basebackup命令基本语法
pg_basebackup [OPTIONS] [DESTINATION]

— 常用选项
— -h, –host=HOSTNAME 数据库服务器主机名
— -p, –port=PORT 数据库服务器端口号
— -U, –username=USERNAME 数据库用户名
— -D, –pgdata=DIRECTORY 备份目标目录
— -F, –format=p|t 输出格式:p=纯文本, t=tar
— -X, –wal-method=none|fetch|stream WAL获取方式
— -P, –progress 显示备份进度
— -v, –verbose 详细模式
— -z, –gzip 启用gzip压缩
— -Z, –compress=0-9 压缩级别
— -c, –checkpoint=fast|spread 检查点模式
— -T, –tablespace-mfgapping=OLDDIR=NEWDIR 表空间映射
— -S, –slot=SLOTNAME 复制槽名称
— –no-sync 不等待数据同步到磁盘
— –waldir=WALDIR WAL目录路径
— –write-recovery-conf 写入恢复配置文件

3.1.2 pg_basebackup命令执行示例

— pg_basebackup命令执行示例

— 1. 基本备份(纯文本格式)
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup

— 2. 备份为tar格式
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup.tar -F t

— 3. 启用压缩
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -z

— 4. 指定压缩级别
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -Z 5

— 5. 显示备份进度
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -P

— 6. 流式传输WAL
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -X stream

— 7. 快速检查点
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -c fast

— 8. 表空间映射
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -T /postgresql/tablespace1=/backup/tablespace1

— 9. 使用复制槽
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup -S backup_slot

— 10. 写入恢复配置文件
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup –write-recovery-conf

3.2 pg_controldata命令使用详解

3.2.1 pg_controldata命令基本语法

— pg_controldata命令基本语法
pg_controldata [OPTIONS] [DATADIR]

— 常用选项
— -D, –pgdata=DATADIR 数据库数据目录
— -v, –version 显示版本信息
— -? , –help 显示帮助信息

3.2.2 pg_controldata命令执行示例

— pg_controldata命令执行示例

— 1. 查看默认数据目录的控制信息
$ pg_controldata

— 2. 查看指定数据目录的控制信息
$ pg_controldata -D /postgresql/fgdata

— 3. 输出示例(部分)
— pg_control version number: 1300
— Catalog version number: 202209061
— Database system identifier: 7134567890123456789
— Database cluster state: in production
— pg_control last modified: 2026-04-07 10:00:00 CST
— Latest checkpoint location: 0/1234567
— Latest checkpoint’s REDO location: 0/1234567
— Latest checkpoint’s REDO WAL file: 000000010000000000000012
— Latest checkpoint’s TimeLineID: 1
— Latest checkpoint’s PrevTimeLineID: 1
— Latest checkpoint’s full_page_writes: on
— Latest checkpoint’s NextXID: 0:123456
— Latest checkpoint’s NextOID: 123456
— Latest checkpoint’s NextMultiXactId: 1
— Latest checkpoint’s NextMultiOffset: 0
— Latest checkpoint’s oldestXID: 100000
— Latest checkpoint’s oldestXID’s DB: 1
— Latest checkpoint’s oldestActiveXID: 123456
— Latest checkpoint’s oldestMultiXid: 1
— Latest checkpoint’s oldestMulti’s DB: 1
— Time of latest checkpoint: 2026-04-07 10:00:00 CST
— Fake LSN counter for unlogged rels: 0/1
— Minimum recovery ending location: 0/0
— Min recovery ending loc’s timeline: 0
— Backup start location: 0/0
— Backup end location: 0/0
— End-of-backup record required: no
— wal_level setting: replica
— wal_log_hints setting: off
— max_connections setting: 100
— max_worker_processes setting: 8
— max_wal_senders setting: 10
— max_prepared_xacts setting: 0
— max_locks_per_xact setting: 64
— track_commit_timestamp setting: off
— Maximum data alignment: 8
— Database block size: 8192
— Blocks per segment of large relation: 131072
— WAL block size: 8192
— Bytes per WAL segment: 16777216
— Maximum length of identifiers: 64
— Maximum columns in an index: 32
— Maximum size of a TOAST chunk: 1996
— Size of a large-object chunk: 2048
— Date/time type storage: 64-bit integers
— Float4 argument passing: by value
— Float8 argument passing: by value
— Data page checksum version: 0
— Mock authentication nonce: 0000000000000000000000000000000000000000000000000000000000000000

3.3 物理备份恢复流程

— 物理备份恢复流程

— 1. 准备恢复环境
— – 停止PostgreSQL服务
$ systemctl stop postgresql

— – 清理数据目录
$ rm -rf /postgresql/fgdata/*

— 2. 恢复备份
— – 从tar格式备份恢复
$ tar -xzf /backup/basebackup.tar -C /postgresql/fgdata

— – 从纯文本格式备份恢复
$ rsync -av /backup/basebackup/ /postgresql/fgdata/

— 3. 配置恢复参数
— – 创建recovery.conf文件(PostgreSQL 12及以下)
$ cat > /postgresql/fgdata/recovery.conf << EOF restore_command = 'cp /backup/wal/%f %p' recovery_target_timeline = 'latest' EOF -- - 创建postgresql.auto.conf文件(PostgreSQL 13及以上) $ cat > /postgresql/fgdata/postgresql.auto.conf << EOF restore_command = 'cp /backup/wal/%f %p' recovery_target_timeline = 'latest' EOF -- 4. 启动PostgreSQL服务 $ systemctl start postgresql -- 5. 验证恢复结果 -- - 连接到数据库 $ psql -U fgedu -d fgedudb -- - 检查数据完整性 fgedudb=> SELECT count(*) FROM fgedu_users;
— 输出:
— count
— ——-
— 1000
— (1 row)

风哥提示:物理备份恢复需要停止数据库服务,因此应该在维护窗口执行,避免影响业务运行。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 pg_basebackup使用案例

— pg_basebackup使用案例:全量备份

— 1. 执行全量备份
$ pg_basebackup -h 192.168.1.100 -p 5432 -U fgedu -D /backup/basebackup_$(date +%Y%m%d) -F t -z -P -X stream

— 输出:
— pg_basebackup: initiating base backup, waiting for checkpoint to complete
— pg_basebackup: checkpoint completed
— pg_basebackup: write-ahead log start point: 0/1234567 on timeline 1
— pg_basebackup: starting background WAL receiver
— 22334/22334 kB (100%), 1/1 tablespaces
— pg_basebackup: write-ahead log end point: 0/1234567
— pg_basebackup: waiting for background process to finish streaming WAL
— pg_basebackup: base backup completed

— 2. 验证备份文件
$ ls -lh /backup/
— 输出:
— -rw-r–r– 1 fgedu fgedu 1.2G Apr 7 10:00 basebackup_20260407.tar.gz

4.2 pg_controldata使用案例

— pg_controldata使用案例:查看数据库状态

— 1. 查看控制数据
$ pg_controldata -D /postgresql/fgdata

— 2. 检查数据库集群状态
$ pg_controldata -D /postgresql/fgdata | grep “Database cluster state”
— 输出:
— Database cluster state: in production

— 3. 检查最新检查点位置
$ pg_controldata -D /postgresql/fgdata | grep “Latest checkpoint location”
— 输出:
— Latest checkpoint location: 0/1234567

— 4. 检查WAL级别
$ pg_controldata -D /postgresql/fgdata | grep “wal_level setting”
— 输出:
— wal_level setting: replica

— 5. 检查数据库块大小
$ pg_controldata -D /postgresql/fgdata | grep “Database block size”
— 输出:
— Database block size: 8192

4.3 物理备份恢复案例

— 物理备份恢复案例

— 1. 停止PostgreSQL服务
$ systemctl stop postgresql

— 2. 清理数据目录
$ rm -rf /postgresql/fgdata/*

— 3. 恢复备份
$ tar -xzf /backup/basebackup_20260407.tar.gz -C /postgresql/fgdata

— 4. 配置恢复参数
$ cat > /postgresql/fgdata/postgresql.auto.conf << EOF restore_command = 'cp /backup/wal/%f %p' recovery_target_timeline = 'latest' EOF -- 5. 启动PostgreSQL服务 $ systemctl start postgresql -- 6. 查看恢复状态 $ tail -f /postgresql/fgdata/log/postgresql-2026-04-07.log -- 输出: -- 2026-04-07 10:30:00 CST [12345] LOG: starting PostgreSQL 18.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.2.0, 64-bit -- 2026-04-07 10:30:00 CST [12345] LOG: listening on IPv4 address "0.0.0.0", port 5432 -- 2026-04-07 10:30:00 CST [12345] LOG: listening on IPv6 address "::", port 5432 -- 2026-04-07 10:30:00 CST [12345] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" -- 2026-04-07 10:30:00 CST [12346] LOG: database system was interrupted; last known up at 2026-04-07 10:00:00 CST -- 2026-04-07 10:30:00 CST [12346] LOG: starting point-in-time recovery -- 2026-04-07 10:30:00 CST [12346] LOG: restored log file "000000010000000000000012" from archive -- 2026-04-07 10:30:00 CST [12346] LOG: redo starts at 0/1234567 -- 2026-04-07 10:30:00 CST [12346] LOG: consistent recovery state reached at 0/1234567 -- 2026-04-07 10:30:00 CST [12345] LOG: database system is ready to accept connections -- 7. 验证恢复结果 $ psql -U fgedu -d fgedudb -c "SELECT count(*) FROM fgedu_users;" -- 输出: -- count -- ------- -- 1000 -- (1 row)

Part05-风哥经验总结与分享

5.1 物理备份使用技巧

物理备份使用技巧:

  • pg_basebackup技巧:
    • 使用 -X stream 选项流式传输WAL,确保备份的一致性
    • 使用 -z 或 -Z 选项启用压缩,减小备份文件大小
    • 使用 -P 选项显示备份进度,便于监控备份过程
    • 使用 -c fast 选项执行快速检查点,减少备份等待时间
    • 对于大型数据库,使用 -T 选项进行表空间映射,便于恢复到不同位置
    • 使用 –write-recovery-conf 选项自动生成恢复配置文件,简化恢复过程
  • pg_controldata技巧:
    • 定期查看控制数据,了解数据库集群的状态
    • 检查最新检查点位置,确保数据库正常运行
    • 检查WAL级别设置,确保符合备份需求
    • 检查数据库块大小等参数,了解数据库配置
    • 在备份和恢复前后查看控制数据,验证操作结果

5.2 物理备份常见问题解决

— 物理备份常见问题解决

— 1. pg_basebackup连接失败
— 问题:无法连接到数据库服务器
— 解决:
— – 检查主机名和端口号是否正确
— – 检查用户名和密码是否正确
— – 检查数据库服务器是否运行
— – 检查pg_hba.conf文件中的访问控制设置
— – 确保用户具有REPLICATION权限

— 2. pg_basebackup备份失败
— 问题:备份过程中出现错误
— 解决:
— – 检查磁盘空间是否充足
— – 检查网络连接是否稳定
— – 检查数据库服务器是否正常运行
— – 检查用户权限是否足够
— – 查看详细日志(-v)了解具体错误原因

— 3. 物理备份恢复失败
— 问题:恢复过程中出现错误
— 解决:
— – 检查备份文件是否完整
— – 检查数据目录权限是否正确
— – 检查恢复配置文件是否正确
— – 检查WAL文件是否可用
— – 查看数据库日志了解具体错误原因

— 4. pg_controldata执行失败
— 问题:无法读取控制数据
— 解决:
— – 检查数据目录路径是否正确
— – 检查数据目录权限是否正确
— – 检查控制文件是否存在且完整
— – 确保PostgreSQL服务已停止(如果直接访问数据目录)

5.3 物理备份性能优化

— 物理备份性能优化

— 1. pg_basebackup性能优化
— – 使用并行备份:虽然pg_basebackup本身不支持并行,但可以通过表空间映射和多个备份进程提高性能
— – 使用快速检查点:使用 -c fast 选项减少备份等待时间
— – 优化网络传输:使用高速网络连接,减少备份时间
— – 优化存储性能:使用高性能存储设备,提高备份和恢复速度
— – 合理设置压缩级别:根据存储和CPU资源情况,选择合适的压缩级别

— 2. 备份策略优化
— – 结合全量备份和增量备份:减少备份时间和存储空间
— – 选择合适的备份时间:在业务低峰期执行备份
— – 合理设置备份保留期限:根据业务需求和存储情况,设置合适的备份保留期限
— – 定期清理过期备份:避免存储空间被占满

— 3. 恢复性能优化
— – 使用快速存储设备:提高恢复速度
— – 优化恢复配置:合理设置恢复参数,提高恢复效率
— – 并行恢复:对于大型数据库,考虑使用并行恢复策略
— – 预配置恢复环境:提前准备好恢复环境,减少恢复时间

风哥提示:物理备份是PostgreSQL数据库备份的重要方式,特别适合大型数据库。掌握pg_basebackup和pg_controldata的使用方法,制定完善的物理备份策略,对于保障数据库安全和快速恢复至关重要。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息