postgresql使用pg_basebackup备份与恢复

    postgresql可以使用pg_dump,pg_restore等命令来进行备份与恢复,那种情况不用停止pgsql服务,只需要执行备份恢复命令即可。

    今天介绍的这种备份方式,类似于文件系统的备份与恢复,它需要使用pg_basebackup命令来进行备份,这个命令可以将pgsql的数据文件备份为两个压缩文件:base.tar pg_wal.tar。本别是数据文件和归档文件,恢复的时候,需要设置按照归档文件来恢复。

    这种恢复,需要先把备份的压缩文件替换当前的数据文件,然后修改postgresql.conf,因为这个配置文件在data文件夹中,所以只能是在把base.tar解压到数据库当前数据位置,也就是我们默认初始化指定的数据保存位置data文件夹中,才能修改配置,在配置好归档设置以后,可以启动pgsql服务,进行启动恢复。

    在恢复过程中,会拷贝归档文件,进行数据恢复。

    恢复成功,也就是数据库服务启动成功。这个时候我们访问数据库,它是作为归档状态存在的,所以只能读,不能写操作。

   为了恢复数据库写操作,我们需要在命令行下执行切换数据库状态的指令。切换成功之后,才可以进行读写操作。

    下面实际演示这些流程:

    1、准备数据

    2、数据备份

    数据备份使用命令pg_basebackup -D backup -Ft -Pv

    其中-D指定数据备份的位置。这里指定的是当前文件夹下的backup,也可以指定绝对路径。

    -F表示备份文件格式,这里t表示是tar压缩文件格式。

    -Pv表示显示备份过程。

    因为是本机数据库,所以这里省略了-U -h -p等数据库连接相关的设置。

    生成的备份文件:

 

    3、停止数据库服务

bin\pg_ctl stop

    4、清空当前数据目录

 

    5、解压备份文件到指定位置

    解压数据文件base.tar到当前数据目录data中,解压归档文件pg_wal.tar到一个指定位置,这里指定到d:\\tools\\pgsql\\archive目录。

    6、修改postgresql.conf配置文件,指定restore_command,recovery_target

    restore_command命令在linux下拷贝是cp命令,在windows下是copy命令,最后注意一下windows下的路径需要使用 \\ 来表示目录分隔符。

    这里的archive目录就是我们在前面第5步中解压归档文件pg_wal.tar 到的目录。

    restore_command,recovery_target两个配置在postgresql.conf配置文件中是注释掉的。这两个变量设置在pg12以后是合并到了postgresql.conf中,在老的版本中,需要新建recovery.conf并设置。

    为了配合恢复,我们需要在data目录中新建一个recovery.signal的空文件。 

    7、启动恢复

    恢复成功之后,可以验证数据是否恢复成功,但是这时候,只能读,不能写。

    这个时候数据库是归档状态,可以通过pg_controldata命令查看数据库簇状态:

    8、切换数据库状态

    执行pg_ctl promote命令即可。

    9、验证读写

     当数据库状态切换到正在运行中之后,数据库就不再是只读了。

### 备份操作 使用 `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]。 ### 注意事项 - 在执行任何备份恢复操作前,请确认网络连接稳定且具有足够的权限访问源数据库及写入目标路径。 - 如果是首次进行此类操作,建议先在一个测试环境中练习整个流程,包括故障注入后的恢复演练。 - 定期检查归档日志是否完整无缺,这对于保证能够成功恢复至最新状态非常重要。 - 确保备份介质安全可靠,考虑采用加密等手段保护敏感数据不被未授权访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值