七叶笔记 » 数据库 » 使用pg_basebackup对Postgre进行备份与恢复的实现

使用pg_basebackup对Postgre进行备份与恢复的实现

开始使用pg_basebackup命令进行备份。当pgbak文件夹不存在的时候,备份的过程中会自动创建该文件夹。

关于pg_basebackup的命令,可以参考文档

进行模拟破坏。停掉库。 删除掉data目录(注意wal日志以.backup结尾及以后的文件不要删除,因为这些文件没有备份,恢复的时候要使用)。把备份好的tar.gz文件解压到data。

在恢复之前,修改加压后的tar.gz里面的recovery.conf文件(其实是指定归档的位置,这样就会进行恢复)。否则无法启动数据库。修改后的内容如下(#屏蔽掉了备份生成的命令):

启动postgres数据库

这样数据库就起来了。恢复正常。

下面是恢复后的wal日志文件情况。

恢复的时候,碰到的一些问题

问题1 。这个原因,是因为在recovery.conf中没有指定restore_command。是按照replicate来进行复制了。所以出错。

问题2,这样原因,是因为在恢复的时候,tar.gz文件夹里面,包含有自己建立的表空间。而在模拟故障的是时候,表空间没有被删除,也就是说,没有使用tar.gz里面的表空间文件覆盖原来的表空间。覆盖后OK。

补充:pgsql的pg_basebackup

pg_basebackup:是从pgsql提供的一个方便基础备份的工具。经常用来搭建流复制环境

属于物理备份。pgsql的逻辑备份是pg_dump工具。

参数说明(pg_basebackup --help 详细查看):

-h 指定连接的数据库的主机名或IP地址,这里就是主库的ip。

-U 指定连接的用户名,专门负责流复制的repl用户。

-F 指定了输出的格式,支持p(原样输出)或者t(tar格式输出)。

-x 表示备份开始后,启动另一个流复制连接从主库接收WAL日志。

-P 表示允许在备份过程中实时的打印备份的进度。

-R 表示会在备份结束后自动生成recovery.conf文件,这样也就避免了手动创建。(12.0有差异)

-D 指定把备份写到哪个目录,这里尤其要注意一点就是做基础备份之前从库的数据目录(比如:/usr/local/postgresql/data)目录需要手动清空。

-l 表示指定一个备份的标识

如:pg_basebackup -h 192.168.23.193 -p 3012 -U testacc -F p -P -X s -R -D /data -r 50M -l label_1576225683"

注意:

12 版本pg_basebackup 命令的 -R 参数的效果和之前不同,主要体现在:

命令执行后在 $PGDATA 目录创建 standby.signal 标识文件,文件内容为空

命令执行后在 $PGDATA 目录的 postgresql.auto.conf 文件中添加 primary_conninfo 参数信息

以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。如有错误或未考虑完全的地方,望不吝赐教。

相关文章