pgbackrest 备份工具使用 postgresql

为啥我会使用pgbackrest进行备份?因为postgresql没有自带的差异备份工具。。。而我们在生产环境上,一般都需要用到差异备份或者增量备份。我们的备份策略基本是,1天1次完整备份,1个小时1次差异备份。如果只需要完整备份,直接用pg_dump或者是pg_backbase加上linux的定时任务就可以了。

但是pgbackrest 也有不太好的地方,那就是pgbackrest 是针对整个数据库实例的备份,应对一个数据库实例多个数据库的不同备份策略时就一言难尽了。

1.安装pgbackrest

#添加pgBackRest的仓库:
curl -s https://raw.githubusercontent.com/pgbackrest/pgbackrest/master/src/bin/pgbackrest-repo-info | bash
#添加pgBackRest的APT仓库:
echo "deb [arch=$(dpkg --print-architecture)] http://apt.pgbackrest.org $(lsb_release -cs) $(lsb_release -cs)" | sudo tee /etc/apt/sources.list.d/pgbackrest.list
#导入仓库的GPG密钥:
wget -O - https://pgbackrest.org/pgbackrest.asc | sudo apt-key add -
#更新APT包索引:
sudo apt-get update
#安装pgBackRest:
sudo apt-get install pgbackrest

2.创建pgbackrest需要的文件目录

注意:命令中postgres:postgres,是为了授权给postgres用户权限,而且最好是用postgres用户,不然会遇到很多操作报无权限【因为postgresql在安装初始化的时候就自动创建了一个系统用户postgres,默认使用的也是postgres】

其实就2个文件夹,1个文件,其余的命令都是为了授权

sudo mkdir -p -m 770 /var/log/pgbackrest
sudo chown postgres:postgres /var/log/pgbackrest
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf

3.修改postgresql.conf文件

需要开启wal日志归档

archive_mode = on
archive_command = 'pgbackrest --stanza=sportsdb archive-push %p'

4.编辑pgbackrest.conf文件

[sportsdb]是自定义的stanza实例名称,后面会用到

vim  /etc/pgbackrest/pgbackrest.conf

[sportsdb]
pg1-path= /var/lib/postgresql/16/main
pg1-user=postgres
pg1-port=5432

[global]
repo1-path=/var/lib/pgbackrest

5.创建pgbackrest存储库

--log-level-console=info 是为了在创建时在控制台打印日志,不写也行,就是不打印日志而已

pgbackrest --stanza=sportsdb --log-level-console=info create-stanza

6.检查存储库情况

pgbackrest --stanza=sportsdb --log-level-console=info check

 

7.备份

#全量备份

pgbackrest --stanza=sportsdb --log-level-console=info backup

#差异备份

 pgbackrest --stanza=sportsdb --log-level-console=info --type=diff backup

#增量备份

 pgbackrest --stanza=sportsdb --log-level-console=info --type=incr backup

8.查看备份情况

9.还原

还原之前要停止数据库服务,还原完毕后再重新启动服务

#这种还原备份需要先清理数据库集群目录,然后才能执行还原

pgbackrest --stanza=sportsdb --log-level-console=info restore

#加上 --delta ,pgBackRest 自动确定数据库集群目录中的哪些文件可以保留,哪些文件需要从备份中恢复 — 它还会删除备份清单中不存在的文件,以便处理不同的更改

pgbackrest --stanza=sportsdb --log-level-console=info --delta restore 

#基于时间线恢复,恢复到2024-05-08 16:55:46.230286+08之前的数据

pgbackrest --stanza=sportsdb --delta --type=time "--target=2024-05-08 16:55:46.230286+08" --log-level-console=info restore
 

注意:基于时间线恢复之后数据库会变成只读模式,需要执行select pg_wal_replay_resume(),参考http://www.postgres.cn/docs/10/recovery-target-settings.html

扩展:

停止/启动pgbackrest

pgbackrest stop/start

删除stanza

参考:Deleting a Stanza | pgBackRest (pmatseykanets.github.io)

 pgbackrest --stanza=sportsdb --log-level-console=info stanza-delete
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 是一种开源的关系型数据库管理系统,它具有强大的备份和恢复功能。在进行 PostgreSQL 备份时,我们可以使用两种常见的方法:物理备份和逻辑备份。 物理备份是通过复制数据库文件来实现的,通常使用 pg_basebackup 工具来创建基本物理备份。这种备份方法较快,可以减少备份时间和恢复时间,但要注意数据一致性和备份文件的完整性。 逻辑备份是通过导出数据和数据库结构的 SQL 脚本来实现的,通常使用 pg_dump 工具来创建逻辑备份。这种备份方法可以跨不同版本的 PostgreSQL 进行备份和恢复,但备份和恢复时间较长,尤其在处理大规模数据时。 无论是物理备份还是逻辑备份,我们都可以使用定时任务或者自动化脚本来实现定期备份数据库的目的。同时,为了保证备份文件的安全性,我们应该将备份文件存储在可靠的存储介质上,并定期对备份文件进行检查和验证。 另外,为了应对灾难恢复的需求,我们还可以考虑使用 PostgreSQL 流复制技术来实现实时备份和高可用性。通过设置主从复制机制,我们可以将主数据库的数据实时同步到从数据库,以实现数据的持续备份和故障切换。这样可以大大提高数据库的可靠性和可用性。 综上所述,PostgreSQL 备份是非常重要的数据库管理工作之一,有效的备份策略可以保障数据的安全性和可靠性,同时在灾难恢复时可以减少数据丢失的风险。因此,我们应该根据实际情况选择合适的备份方法,并定期进行备份,并确保备份文件的完整性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值