瀚高数据库 9 版本使用 pg_basebackup 命令进行备份与恢复操作文档
一、环境准备
1.1 软件环境
• 操作系统:CentOS 7.9 64 位
• 瀚高数据库版本:瀚高企业版 V9.0(兼容 PostgreSQL 14)
• 数据库实例信息:
◦ 实例名称:highgo9
◦ 监听地址:192.168.1.100
◦ 端口号:5866
◦ 超级用户:sysdba
◦ 示例数据库:testdb(用于演示备份与恢复,已创建并包含测试表 test_table 及数据)
1.2 前置检查
1. 确认瀚高数据库服务正常运行,执行以下命令查看服务状态:
systemctl status highgo9 |
若服务未启动,执行启动命令:
systemctl start highgo9 |
1. 验证 pg_basebackup 工具是否存在,该工具默认随瀚高数据库 9 版本安装,位于数据库安装目录的 bin 文件夹下(默认安装路径调整为/opt/highgo9.0)。执行以下命令查看工具版本:
/opt/highgo9.0/bin/pg_basebackup --version |
正常输出应包含 “pg_basebackup (瀚高数据库) 9.0” 等版本信息。
二、备份前配置(关键步骤)
pg_basebackup 基于数据库的 WAL(Write-Ahead Logging)机制实现备份,瀚高 9 版本在参数配置上有细微调整,需按以下步骤配置确保备份功能可用。
2.1 修改 postgresql.conf 配置文件
1. 找到数据库实例的配置文件目录,瀚高 9 版本默认路径为/opt/highgo9.0/data(若自定义安装路径,需替换为实际路径),编辑 postgresql.conf 文件:
vi /opt/highgo9.0/data/postgresql.conf |
1. 调整以下关键参数(瀚高 9 版本兼容 PostgreSQL 14,部分参数默认值优化,需重点确认):
# 启用归档模式(必须开启,否则pg_basebackup无法进行一致性备份) archive_mode = on # 归档命令(将WAL日志归档到指定目录,此处归档目录为/opt/highgo_backup/archive_wal) archive_command = 'cp %p /opt/highgo_backup/archive_wal/%f' # WAL日志级别(瀚高9版本默认支持hot_standby,无需额外调整,确保配置即可) wal_level = hot_standby # 最大 WAL 归档进程数(瀚高9版本性能优化,可根据服务器CPU核心数调整,建议设置为2-4) max_wal_senders = 4 # WAL日志保留数量(瀚高9版本推荐使用wal_keep_size替代wal_keep_segments,单位为MB) wal_keep_size = 16MB # 允许备份的连接数(新增参数,确保备份用户可正常连接,默认值为10,无需修改) max_replication_slots = 10 |
2.2 创建归档目录并授权
1. 创建 WAL 归档目录及备份根目录,执行命令:
mkdir -p /opt/highgo_backup/archive_wal /opt/highgo_backup/base_backup |
1. 授予瀚高数据库运行用户(默认仍为 highgo)目录权限,瀚高 9 版本对权限校验更严格,需确保目录权限正确:
chown -R highgo:highgo /opt/highgo_backup chmod -R 700 /opt/highgo_backup |
2.3 重启数据库使配置生效
修改配置后需重启数据库实例,瀚高 9 版本服务管理命令与旧版本一致,执行命令:
systemctl restart highgo9 |
2.4 配置备份用户(可选,推荐)
为避免直接使用超级用户 sysdba 进行备份,可创建专用备份用户并授权,瀚高 9 版本在权限控制上更细化,需按以下步骤操作:
1. 登录瀚高数据库(使用 sysdba 用户):
/opt/highgo9.0/bin/psql -U sysdba -d postgres -h 192.168.1.100 -p 5866 |
1. 创建备份用户(示例用户名为 backup_user,密码为 Backup@123,瀚高 9 版本要求密码复杂度更高,需包含大小写字母、数字和特殊字符):
CREATE ROLE backup_user WITH LOGIN PASSWORD 'Backup@123'; |
1. 授予备份用户必要权限(瀚高 9 版本需额外授予 REPLICATION 权限和对 postgres 数据库的连接权限):
ALTER ROLE backup_user WITH REPLICATION; GRANT CONNECT ON DATABASE postgres TO backup_user; GRANT USAGE ON SCHEMA public TO backup_user; |
1. 退出数据库:
\q |
三、使用 pg_basebackup 进行数据库备份
3.1 备份命令语法说明
瀚高 9 版本的 pg_basebackup 命令参数基本兼容旧版本,但新增部分优化参数,基本语法如下:
pg_basebackup -h <数据库地址> -p <端口号> -U <用户名> -D <备份目录> -F <备份格式> -X <WAL日志获取方式> -P -v -Z <压缩级别> |
新增参数说明:
• -Z:备份压缩级别(0-9,0 为无压缩,9 为最高压缩,瀚高 9 版本支持备份时直接压缩,推荐设置为 3-5,平衡性能与压缩率)
其他参数含义与旧版本一致:
• -h:数据库监听地址(如 192.168.1.100)
• -p:数据库端口号(如 5866)
• -U:登录数据库的用户名(如 backup_user 或 sysdba)
• -D:备份文件的输出目录(必须是不存在的空目录,否则会报错)
• -F:备份格式,p表示纯文本格式(默认,可直接用于恢复),t表示 tar 压缩格式
• -X:WAL 日志获取方式,f表示备份结束后立即获取所有必要的 WAL 日志(推荐),s表示备份过程中持续获取 WAL 日志
• -P:显示备份进度条
• -v:显示详细备份日志(便于排查问题)
3.2 执行全量备份(示例)
以备份用户 backup_user 为例,将 testdb 所在的数据库实例全量备份到/opt/highgo_backup/base_backup/20240520_full目录(备份目录以日期命名,便于区分),并设置压缩级别为 4,执行命令:
/opt/highgo9.0/bin/pg_basebackup -h 192.168.1.100 -p 5866 -U backup_user -D /opt/highgo_backup/base_backup/20240520_full -F p -X f -P -v -Z 4 |
执行命令后,会提示输入 backup_user 的密码(即 Backup@123),输入后开始备份,终端会显示备份进度(如 “100% complete”)及压缩率信息,备份完成后,20240520_full目录下会包含数据库的所有数据文件、配置文件等,且文件已按指定级别压缩。
3.3 验证备份结果
备份完成后,除查看目录大小和关键文件外,瀚高 9 版本可通过 pg_checksums 工具验证备份文件完整性(需数据库启用数据校验,默认已启用):
1. 查看备份目录大小(压缩后目录体积会明显减小):
du -sh /opt/highgo_backup/base_backup/20240520_full |
1. 查看备份目录下的关键文件:
ls -l /opt/highgo_backup/base_backup/20240520_full | grep -E "postgresql.conf|base|pg_waldir" |
瀚高 9 版本将 WAL 日志目录重命名为 pg_waldir,若能看到该目录及 base 目录、postgresql.conf 文件,说明备份文件完整。
1. 验证备份文件校验(可选,需安装 pg_checksums 工具,随瀚高 9 版本 bin 目录自带):
/opt/highgo9.0/bin/pg_checksums verify /opt/highgo_backup/base_backup/20240520_full |
输出 “Data checksum verification complete: 0 bad blocks” 表示备份文件无损坏。
四、使用备份文件进行数据库恢复
瀚高 9 版本在恢复流程上与旧版本基本一致,但恢复配置文件参数有细微调整,需重点关注。
4.1 恢复场景说明
本次恢复演示 “数据库实例故障,需通过全量备份 + WAL 归档日志恢复到故障前状态” 的场景,恢复前需确保:
• 故障数据库实例已停止服务
• 备份文件(全量备份 + WAL 归档日志)完整可用
• 恢复目标目录已准备(可使用原数据目录,也可新建目录)
4.2 恢复前准备
1. 停止故障数据库实例(若服务未完全崩溃,执行命令):
systemctl stop highgo9 |
1. 备份原数据目录(若需保留故障数据,可选操作):
mv /opt/highgo9.0/data /opt/highgo9.0/data_bak_20240520 |
1. 创建新的恢复数据目录(瀚高 9 版本对目录权限校验更严格,需确保目录为空且权限正确):
mkdir -p /opt/highgo9.0/data chown -R highgo:highgo /opt/highgo9.0/data chmod -R 700 /opt/highgo9.0/data |
4.3 恢复全量备份文件
将全量备份目录(20240520_full)下的所有文件复制到新的数据目录,执行命令:
cp -r /opt/highgo_backup/base_backup/20240520_full/* /opt/highgo9.0/data/ |
瀚高 9 版本支持压缩备份直接恢复,无需额外解压步骤,复制过程中会自动处理压缩文件。
4.4 配置恢复参数(关键步骤)
1. 进入数据目录,创建恢复配置文件recovery.signal(瀚高 9 版本仍使用该文件触发恢复,参数有调整):
vi /opt/highgo9.0/data/recovery.signal |
1. 添加恢复参数(瀚高 9 版本新增 recovery_target_action 参数,控制恢复完成后的操作):
# 恢复模式(设置为standalone,恢复后数据库为独立实例) standby_mode = 'off' # 恢复时使用的归档命令(从之前的归档目录读取WAL日志) restore_command = 'cp /opt/highgo_backup/archive_wal/%f %p' # 恢复到最新状态(瀚高9版本支持更精细的时间点恢复,此处保持默认) recovery_target_timeline = 'latest' # 恢复完成后的操作(新增参数,设置为promote,恢复后自动切换为可读写实例) recovery_target_action = 'promote' # 恢复过程中允许的错误次数(新增参数,默认0,不允许错误,确保恢复完整性) recovery_max_error_count = 0 |
4.5 授权恢复目录
再次确认数据目录的权限,避免因权限问题导致恢复失败:
chown -R highgo:highgo /opt/highgo9.0/data chmod -R 700 /opt/highgo9.0/data |
4.6 启动数据库进行恢复
启动数据库实例,瀚高 9 版本会自动检测recovery.signal文件并执行恢复操作:
systemctl start highgo9 |
可通过查看数据库日志实时监控恢复进度:
tail -f /opt/highgo9.0/data/pg_log/postgresql-$(date +%Y-%m-%d)_*.log |
日志中出现 “recovery complete” 表示恢复完成。
4.7 验证恢复结果
1. 查看数据库服务状态,确认恢复后服务正常运行:
systemctl status highgo9 |
输出 “active (running)” 表示服务启动成功。
1. 登录数据库,验证示例数据库 testdb 及测试表 test_table 的数据是否恢复:
# 登录数据库 /opt/highgo9.0/bin/psql -U sysdba -d testdb -h 192.168.1.100 -p 5866 # 查看test_table表数据 SELECT * FROM test_table; |
若能正常查询到 test_table 表中的所有测试数据,说明恢复成功。
1. 恢复完成后,瀚高 9 版本会自动删除recovery.signal文件并生成pg_waldir/archive_status目录,确认该目录存在:
ls -l /opt/highgo9.0/data/pg_waldir/archive_status |
五、常见问题与解决方法
5.1 备份时提示 “could not initiate base backup: ERROR: could not create replication slot”
原因:瀚高 9 版本默认启用 replication slot 机制,备份用户缺少创建 slot 的权限,或 max_replication_slots 参数设置过小。
解决方法:
1. 登录数据库授予备份用户创建 replication slot 权限:
GRANT CREATE ON REPLICATION SLOT TO backup_user; |
1. 调整 postgresql.conf 中 max_replication_slots 参数为 4-8(根据备份需求),重启数据库:
vi /opt/highgo9.0/data/postgresql.conf max_replication_slots = 8 systemctl restart highgo9 |
5.2 恢复时提示 “could not restore WAL segment: No such file or directory”
原因:WAL 归档日志缺失,或 restore_command 路径配置错误,瀚高 9 版本对路径大小写敏感,需严格匹配。
解决方法:
1. 检查归档目录/opt/highgo_backup/archive_wal是否存在缺失的 WAL 日志文件(文件名如 000000010000000000000001)。
2. 确认 restore_command 中的路径与实际归档目录一致,避免大小写错误(如 archive_wal 不可写为 Archive_Wal)。
3. 若 WAL 日志缺失,需重新执行全量备份后再进行恢复。
5.3 数据库启动后提示 “data directory has wrong ownership”
原因:数据目录属主非 highgo 用户,瀚高 9 版本对目录 ownership 校验严格,不允许其他用户拥有数据目录权限。
解决方法:
执行以下命令重新授权,确保属主为 highgo:
chown -R highgo:highgo /opt/highgo9.0/data chmod -R 700 /opt/highgo9.0/data |
授权后重启数据库:
systemctl restart highgo9 |




