重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 171|回复: 0

pg使用pg_basebackup 物理复制数据库

[复制链接]
发表于 2024-2-27 01:03:52 | 显示全部楼层 |阅读模式
摘要:在备份数据库实例的教程中,我们讨论了如何使用pg_basebackup对 PostgreSQL 实例进行物理备份。我们可能会在各种情况下恢复此备份,例如在复制中创建备用服务器,或将数据库恢复到某个时间点。在本教程中,我们将了解需要哪些步骤,来恢复一个pg_basebackup生成的备份。

准备工作
为了恢复一个使用pg_basebackup进行的备份,用于恢复的新目录的可用存储空间,应该与原始数据目录相同。此外,如果需要,可以通过网络将备份数据复制到需要恢复的目标服务器。
pg_basebackup -D /tmp/pg_backup/ -Ft -Pv -U postgres -h 1.15.57.253 -p5432 -R

需要以postgres系统用户,将备份数据提取到目标数据目录。因此,很重要的是,需要有postgres系统用户的访问权限,来执行数据库实例的恢复。

操作步骤
以下是将备份数据恢复到/pgdata目录,并使用恢复的数据启动 PostgreSQL 所涉及的步骤:

1. 创建一个需要用于恢复备份的目录。在我们继续步骤 2 之前,该目录需要为空:

$ sudo mkdir -p /pgdata
2. 将base.tar.gz文件解压到目标目录:

$ tar xzf /backup_location/base.tar.gz -C /pgdata
3. 如果数据库服务器包含一个或多个表空间,那么各个表空间也应该提取到不同的目录。从以下日志中可以看出,备份完成后,我们会看到每个表空间都有一个 tar 文件(以表空间的oid编号命名):

$ ls -l /backup_dir/20201027/
total 16816
-rw-------. 1 postgres postgres 1006685 Oct 27 11:48 16575.tar.gz
-rw-------. 1 postgres postgres 1006657 Oct 27 11:48 16576.tar.gz
-rw-------. 1 postgres postgres 15183012 Oct 27 11:48 base.tar.gz
-rw-------. 1 postgres postgres 17094 Oct 27 11:48 pg_wal.tar.gz
在步骤 2 之后,使用base.tar.gz提取的数据目录中会有一个tablespace_map文件:

$ cat /pgdata/tablespace_map
16575 /data_tblspc
16576 /index_tblspc
因此,必须将每个表空间提取到tablespace_map文件中指定的目录:

$ tar xzf 16575.tar.gz -C /data_tblspc
$ tar xzf 16576.tar.gz -C /index_tblspc
4. 将备份时生成的 WAL 段文件解压到pg_wal目录中:

$ tar xzf pg_wal.tar.gz -C /pgdata/pg_wal
5. 使用恢复了备份数据的目录启动 PostgreSQL:

$ pg_ctl -D /pgdata start
怎么做到的
在步骤 1 中,我们创建一个目录,该目录会作为用于恢复任务的数据目录或目标目录。

然后继续步骤 2,将base.tar.gz文件解压到目标目录。

如步骤 3 中所示,我们使用表空间映射将表空间数据提取到相同位置。如果需要调整表空间位置,只需手动修改tablespace_map文件,并为每个表空间添加新位置即可完成。

然后我们继续执行步骤 4,将 WAL 段文件提取到目标目录的pg_wal目录中。成功完成所有四个步骤后,我们就可以使用新的数据目录启动数据库实例,如步骤 5 所示。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-4-18 20:02 , Processed in 0.098820 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表