暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

瀚高数据库使用 pg_basebackup 命令进行备份与恢复操作文档

原创 Huigelao 2025-09-14
463

瀚高数据库 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

最后修改时间:2025-10-19 20:55:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论