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

[译] 如何使用pg_rman 进行PostgreSQL备份恢复

原创 Bigbig 2022-06-02
1255

原文地址:How to do backup and restore for PostgreSQL using pg_rman
原文作者:David Zhang

一、概述

PostgreSQL 是一个非常流行的开源关系型数据库管理系统,广泛应用于许多不同的生产环境。要保持生产环境始终正常运行,您需要很多工具,其中一个工具必须是备份和恢复本篇博客将介绍一款专为 Postgres 设计的备份和恢复工具,即 pg_rman

2.什么是pg_rman

pg_ramn 是一个免费的实用程序,旨在备份和恢复 PostgreSQL 数据库。它对整个数据库集群、归档 WAL 和服务器日志进行物理在线备份,并在 Postgres 离线时恢复特定备份。pg_rman 不仅支持备份Primary Postgres 服务器,还可以从备用服务器获取备份。

3.1.如何设置

取决于您运行的 Postgres 版本,在本博客中,我们将使用最新的 pg_rman 标记V1.3.14来演示 PostgreSQL 14 上的备份和恢复。

现在,假设您已正确安装 PostgreSQL 14,那么您可以按照以下步骤设置 Postgres 服务器。

mkdir pgdata_rman
initdb  -D pgdata_rman
echo "archive_mode = on" >> pgdata_rman/postgresql.conf
echo "archive_command = 'cp %p /media/david/disk1/archive/%f'" >> pgdata_rman/postgresql.conf
echo "log_directory = '/media/david/disk1/pglog'" >> pgdata_rman/postgresql.conf
pg_ctl -D pgdata_rman -l pglog/logfile start

然后,我们可以从 github 上查看源代码并进行编译。

git clone https://github.com/ossc-db/pg_rman.git
git checkout V1.3.14 -b local
make clean && make && make install

如果没有错误,那么您已经为其余的测试准备好了 pg_rman

3.2. 备份还原

在运行任何备份和恢复测试之前,我们需要为 pg_rman 初始化备份以正确设置备份文件夹。

# Initialize backup
pg_rman init -B /media/david/disk1/backup_rman -D /media/david/disk1/pgdata_rman 

初始化备份文件夹后,我们可以尝试创建一些表并插入一些数据,如下所示。

psql -d postgres -c "CREATE TABLE abc (ID INT);"
psql -d postgres -c "CREATE TABLE xyz (ID INT);"
psql -d postgres -c "INSERT INTO abc VALUES (1);"
psql -d postgres -c "INSERT INTO xyz VALUES (1);"
psql -d postgres -c "SELECT count(*) from abc;"
psql -d postgres -c "SELECT count(*) from xyz;"

现在,我们可以使用以下命令运行我们的第一个备份,

#Do a backup
pg_rman backup --backup-mode=full --with-serverlog -B /media/david/disk1/backup_rman -D /media/david/disk1/pgdata_rman -A /media/david/disk1/archive -S /media/david/disk1/pglog -p 5432 -d postgres

在这里,我们进行完整备份以包含所有内容,以及此完整备份的所有基本信息。每次备份完成后,pg_rman 都会要求您验证备份。因此,要验证备份,我们可以简单地运行命令,

#Validate
pg_rman validate -B /media/david/disk1/backup_rman

如果备份有效,那么我们可以插入更多数据并运行另一个备份。您可以按照以下步骤操作。

psql -d postgres -c "INSERT INTO abc VALUES (2);"
psql -d postgres -c "INSERT INTO xyz VALUES (2);"
psql -d postgres -c "SELECT count(*) from abc;"
psql -d postgres -c "SELECT count(*) from xyz;"

pg_rman backup --backup-mode=full --with-serverlog -B /media/david/disk1/backup_rman -D /media/david/disk1/pgdata_rman -A /media/david/disk1/archive -S /media/david/disk1/pglog -p 5432 -d postgres 

#Validate
pg_rman validate -B /media/david/disk1/backup_rman


#### Insert more data
psql -d postgres -c "INSERT INTO abc VALUES (3);"
psql -d postgres -c "INSERT INTO xyz VALUES (3);"


$ pg_rman show -B /media/david/disk1/backup_rman
=====================================================================
 StartTime           EndTime              Mode    Size   TLI  Status 
=====================================================================
2022-05-27 13:05:30  2022-05-27 13:05:32  FULL    51MB     1  OK
2022-05-27 13:05:28  2022-05-27 13:05:30  FULL    51MB     1  OK

现在,我们有两个完整备份,第一个在每个表中有一条记录,第二个在每个表中有两条记录,第二个备份我们在每个表中插入了第三条记录。如果您现在查询这两个表,您可以看到以下结果。

$ psql -d postgres -c "SELECT count(*) from abc;"
 count 
-------
     3
(1 row)

$ psql -d postgres -c "SELECT count(*) from xyz;"
 count 
-------
     3
(1 row)

假设我们在第三次操作中出错了,让我们停止 PostgreSQL 服务器并尝试恢复到第二次备份阶段。

# Stop
pg_ctl -D pgdata_rman -l pglog/logfile stop
 
#Restore to target time
pg_rman restore -B /media/david/disk1/backup_rman -D /media/david/disk1/pgdata_rman --recovery-target-time="2022-05-27 13:05:32"


# Restart
pg_ctl -D pgdata_rman -l pglog/logfile start
$ psql -d postgres -c "SELECT count(*) from abc;"
 count 
-------
     2
(1 row)

$ psql -d postgres -c "SELECT count(*) from xyz;"
 count 
-------
     2
(1 row)

就像你所看到的,我们回到第二个备份阶段,每个表只有两条记录。

3.3. 全都消失了

pg_rman 是 PostgreSQL 用户备份和恢复数据库的一个很好的免费开源工具,但是,此时缺少一个功能,即目标表恢复。作为数据库管理员,如果只需要恢复一个表是一项明确的操作,那么一个特定的表恢复可以帮助降低生产注册的风险。

4.总结

在这篇博客中,我们讨论了使用免费开源工具 pg_rman 进行 PostgreSQL 备份恢复的基础知识,希望这篇文章可以帮助您寻找免费的 PostgreSQL 备份和恢复解决方案。

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

评论