pg_basebackup 备份和还原

 文档下载链接(包含图文):

https://download.youkuaiyun.com/download/djinglan/90592237?spm=1011.2124.3001.6210

  1. 备份操作步骤

1. 确认 PostgreSQL 配置

   - 确保 `postgresql.conf` 中 `wal_level` 设置为 `replica` 或更高

   - 确保 `pg_hba.conf` 允许复制连接

2. 创建备份目录:

   mkdir -p /path/to/backup

   chown postgres:postgres /path/to/backup

3. 执行基础备份:

   sudo -u postgres pg_basebackup -D /path/to/backup -Ft -z -Xs -P -U postgres

      参数说明:

   - `-D`:指定备份目录

   - `-Ft`:生成tar格式备份

   - `-z`:启用gzip压缩

   - `-Xs`:在备份期间流式传输WAL文件

   - `-P`:显示进度

   - `-U`:指定连接用户

4. 验证备份:

   ls -lh /path/to/backup

   应该能看到类似 `base.tar.gz` 、25482.tar.gz和 `pg_wal.tar.gz` 的文件.

base.tar.gz --基础数据文件,恢复的时候解压到postgresql的数据目录,这里是

/var/lib/postgresql/16/main/

pg_wal.tar.gz--wal日志归档数据,恢复的时候解压到/var/lib/postgresql/16/main/pg_wal目录

  1. 还原操作步骤

1. 停止 PostgreSQL 服务(实际情况可以不停止,但需重启服务)

   sudo systemctl stop postgresql

2. 备份原数据目录并创建恢复目录

   mv /var/lib/postgresql/16/main /var/lib/postgresql/16/main_old

   mkdir /var/lib/postgresql/16/main

   chown postgres:postgres /var/lib/postgresql/16/main

chmod 0750 /var/lib/postgresql/16/main

3. 解压备份文件:

   sudo -u postgres tar -xzf /path/to/backup/base.tar.gz -C /var/lib/postgresql/16/main

   Sudo -u postgres tar -xzf /path/to/backup/pg_wal.tar.gz -C /var/lib/postgresql/16/main/pg_wal

查看自定义表空间映射关系,可以看到,自定义空间位置是/opt/custome-tablespace/

将24582.tar.gz解压到该目录下

注意:如果24582.tar解压放置的目录不正确,会导致postgresql报错

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432"failed: No such file or directory Is the server running locally and accepting connections on that socket?

4. 配置恢复参数(可选)

   修改 `postgresql.auto.conf` (PostgreSQL 12+):

      restore_command = 'cp /path/to/wal_archive/%f %p'

   recovery_target_timeline = 'latest'

5. 启动 PostgreSQL 服务

   sudo systemctl start postgresql

6. 监控恢复进度:

   sudo -u postgres tail -f /var/log/postgresql/postgresql-12-main.log

 注意事项

1. 确保备份和还原使用相同或兼容的PostgreSQL版本

2. 备份期间数据库会保持可用状态

3. 对于大型数据库,备份和还原可能需要较长时间

4. 考虑使用 `-c fast` 参数进行快速检查点(可能影响性能)

5. 对于生产环境,建议定期测试备份的恢复过程

### 备份操作 使用 `pg_basebackup` 进行 PostgreSQL 数据库备份时,可以通过指定多个参数来控制备份的行为。以下是一个典型的命令示例: ```bash pg_basebackup -h 192.168.111.132 -D F:\data\pgsql\pgbackup -U postgres -c fast -X stream -v -P -R ``` - `-h`:指定远程主机的 IP 地址。 - `-D`:指定本地存储备份文件的目录。 - `-U`:连接数据库使用的用户名。 - `-c`:设置检查点模式为 `fast`,即立即执行检查点。 - `-X`:指定 WAL (Write-Ahead Logging) 的传输方式为 `stream`,表示通过流复制的方式获取 WAL 文件。 - `-v`:启用详细输出模式。 - `-P`:显示进度条。 - `-R`:创建一个恢复所需的配置文件 `standby.signal` `postgresql.auto.conf`,以便于后续的恢复操作。 执行上述命令后,工具会提示输入密码。成功认证后,`pg_basebackup` 将开始基础备份,并等待检查点完成。接着,它会启动后台 WAL 接收进程,并创建一个临时复制槽用于接收 WAL 流。当所有数据 WAL 文件都被正确传输并保存到指定目录后,基础备份即告完成 [^1]。 ### 恢复操作 为了从 `pg_basebackup` 创建的基础备份中恢复数据,需要确保在进行备份时启用了归档功能,并且有适当的配置支持。首先,在目标服务器的数据目录下的 `postgresql.conf` 文件中添加或修改如下参数以开启归档: ```conf wal_level = replica archive_mode = on archive_command = 'copy "%p" D:\\PostgreSQL\\archive\\%f' ``` 这些设置确保了预写日志(WAL)文件可以被正确地归档到指定位置 [^3]。 接下来,将之前通过 `pg_basebackup` 获得的基础备份文件复制到新的数据目录。如果备份过程中使用了 `-R` 参数,则会在备份目录下生成 `standby.signal` `postgresql.auto.conf` 文件。这两个文件对于恢复过程至关重要,因为它们指示 PostgreSQL 使用此备份作为备用实例启动,并自动应用归档中的 WAL 文件以达到最新的状态。 最后,启动 PostgreSQL 实例指向新的数据目录。数据库将会进入恢复模式,并尝试根据基础备份以及归档的日志文件重建整个数据库集群的状态。如果有特定的还原点需求,还可以使用 `pg_create_restore_point()` 函数创建命名恢复点,然后在恢复时指定该恢复点 [^4]。 ### 注意事项 - 在执行任何备份或恢复操作前,请确认网络连接稳定且具有足够的权限访问源数据库及写入目标路径。 - 如果是首次进行此类操作,建议先在一个测试环境中练习整个流程,包括故障注入后的恢复演练。 - 定期检查归档日志是否完整无缺,这对于保证能够成功恢复至最新状态非常重要。 - 确保备份介质安全可靠,考虑采用加密等手段保护敏感数据不被未授权访问。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值