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

相关推荐

  1. 备份恢复新体验!pgBackRest与IvorySQL的完美融合

    2024-05-13 20:44:09       33 阅读
  2. PostgreSQL的扩展(extensions)-常用的扩展之pgBackRest

    2024-05-13 20:44:09       32 阅读
  3. 使用elasticsearch-dump工具备份ES数据库

    2024-05-13 20:44:09       64 阅读
  4. PostgreSQL备份还原数据库

    2024-05-13 20:44:09       39 阅读
  5. PostgreSQL 导入 .gz 备份文件

    2024-05-13 20:44:09       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 20:44:09       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 20:44:09       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 20:44:09       87 阅读
  4. Python语言-面向对象

    2024-05-13 20:44:09       96 阅读

热门阅读

  1. SQLZOO:Self join

    2024-05-13 20:44:09       37 阅读
  2. MySQL sql_mode引发的异常

    2024-05-13 20:44:09       34 阅读
  3. SQLZOO:Using Null

    2024-05-13 20:44:09       41 阅读
  4. Redis面试高频问题

    2024-05-13 20:44:09       34 阅读
  5. 【编程向导】Docker-常用命令

    2024-05-13 20:44:09       38 阅读
  6. OSINT技术情报精选·2024年5月第1周

    2024-05-13 20:44:09       27 阅读
  7. 二分查找GO语言实现

    2024-05-13 20:44:09       36 阅读
  8. MYSQL DBA运维实战

    2024-05-13 20:44:09       29 阅读
  9. js设计模式--发布订阅者模式

    2024-05-13 20:44:09       40 阅读
  10. Goframe学习笔记(六)上下文共享变量

    2024-05-13 20:44:09       49 阅读
  11. 1900年-2100年公历转农历数据

    2024-05-13 20:44:09       32 阅读