PostgreSQL备份工具 pgBackRest使用详解

这篇文章主要介绍了PostgreSQL备份工具 pgBackRest使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

前言

pgBackRest是一款开源的备份还原工具,目标旨在为备份和还原提供可靠易用的备份。

特性

并行备份和还原

备份操作期间压缩通常是其瓶颈所在。pgBackRest通过并行处理解决了备份期间压缩出现的瓶颈问题。

本地远程操作

自定义协议允许 pgBackRest以最小化配置通过SSH在本地或者远程执行备份、还原和归档。并且该程序也通过协议层提供了PostgreSQL查询接口,以便于必须要再远程访问PostgreSQL,从而保证了其安全性能。

全量,增量和差异备份

支持全量,增量和差异备份。pgBackRest不受异步时间影响,因此差异和增量备份完全安全。

备份保留策略和和归档过期

支持保留策略设置可以在任意时间创建全备和差异备份的覆盖。

备份完整性

可以计算备份中每个文件的校验和,并在还原期间重新检查。备份完成文件复制后,将等待直到每个WAL段所需的备份保持一致然后存储到备份仓库中。

块校验和断点备份流压缩和校验和增量还原并行异步WAL Push和Get表空间重新映射和Link支持S3存储支持和Azure兼容对象存储支持加密

使用

安装解压

[postgres@pgserver12 tools]$ tar -zxf pgbackrest-release-2.31.tar.gz[postgres@pgserver12 tools]$ ls

创建必要目录

ostgres@sungsasong ~]$ sudo mkdir -p -m 770 /var/log/pgbackrest
[postgres@sungsasong ~]$ sudo chown postgres.postgres /var/log/pgbackrest/
[postgres@sungsasong ~]$ sudo mkdir -p /etc/pgbackrest
[postgres@sungsasong ~]$ sudo mkdir -p /etc/pgbackrest/conf.d
[postgres@sungsasong ~]$ sudo touch /etc/pgbackrest/pgbackrest.conf
[postgres@sungsasong ~]$ sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
[postgres@sungsasong ~]$ sudo chown postgres.postgres -R /etc/pgbackrest/
[postgres@sungsasong ~]$ sudo mkdir /usr/bin/pgbackrest
[postgres@sungsasong ~]$ sudo chown postgres.postgres /usr/bin/pgbackrest/
[postgres@sungsasong ~]$ sudo chmod 755 /usr/bin/pgbackrest/

 

编译安装

[postgres@sungsasong src]$ ./configure –prefix=/usr/bin/pgbackrest/
[postgres@sungsasong src]$ make -j24
[postgres@sungsasong src]$ make install -j24
install -d /usr/bin/pgbackrest/bin
install -m 755 pgbackrest /usr/bin/pgbackrest/bin

 

命令测试

[postgres@sungsasong src]$ /usr/bin/pgbackrest/bin/pgbackrest
pgBackRest 2.31 – General help
 
Usage:
 pgbackrest [options] [command]
 
Commands:
 archive-get Get a WAL segment from the archive.
 archive-push Push a WAL segment to the archive.
 backup Backup a database cluster.
 check Check the configuration.
 expire Expire backups that exceed retention.
 help Get help.
 info Retrieve information about backups.
 restore Restore a database cluster.
 stanza-create Create the required stanza data.
 stanza-delete Delete a stanza.
 stanza-upgrade Upgrade a stanza.
 start Allow pgBackRest processes to run.
 stop Stop pgBackRest processes from running.
 version Get version.
 
Use ‘pgbackrest help [command]’ for more information.

 

配置数据库监听和访问及日志(可选)

[postgres@sungsasong pgbackrest-release-2.31]$ egrep “10.10” $PGDATA/pg_hba.conf
host all all 10.10.20.0/24 trust
[postgres@sungsasong pgbackrest-release-2.31]$ egrep -v “^#” $PGDATA/postgresql.auto.conf
logging_collector = ‘on’
listen_addresses = ‘*’

 

配置PostgreSQL数据库数据存储目录

[postgres@sungsasong src]$ cat >>/etc/pgbackrest/pgbackrest.conf <<EOF
> [demo]
> pgl-path=/data/pg10/pgdata
> EOF

 

配置环境变量

1[postgres@sungsasong ~]$ echo “export PATH=/usr/bin/pgbackrest/bin:\$PATH” >> .bashrc

创建备份和归档仓库

[postgres@sungsasong ~]$ sudo mkdir -p /pgbackrest/repos
[postgres@sungsasong ~]$ sudo chmod 750 /pgbackrest/ -R
[postgres@sungsasong ~]$ sudo chown postgres.postgres /pgbackrest/ -R

 

将仓库路径加载在pgBackRest配置文件中

[postgres@sungsasong ~]$ cat /etc/pgbackrest/pgbackrest.conf
[demo]
pgl-path=/data/pg10/pgdata
 
[global]
repol-path=/pgbackrest/repos

 

配置数据库归档

[postgres@sungsasong ~]$ egrep -v “^#” $PGDATA/postgresql.auto.conf
logging_collector = ‘on’
archive_mode = ‘on’
archive_command = ‘pgbackrest –stanza=demo archive-push %p’
listen_addresses = ‘*’
log_filename = ‘postgresql.log’
log_line_prefix = ”
max_wal_senders = ‘3’
wal_level = ‘replica’

 

重新启动数据库

[postgres@sungsasong ~]$ pg_ctl restart -D $PGDATA -l /tmp/logfile
waiting for server to shut down…. done
server stopped
waiting for server to start…. done
server started

 

可选配置归档压缩

[postgres@sungsasong ~]$ cat /etc/pgbackrest/pgbackrest.conf
[demo]
pgl-path=/data/pg10/pgdata
 
[global]
repol-path=/pgbackrest/repos
 
[global:archive_push]
compress-level=3

 

配置基于保留策略的归档

[postgres@sungsasong ~]$ cat /etc/pgbackrest/pgbackrest.conf
[demo]
pg1-path=/data/pg10/pgdata
pg1-host-config-path=/data/pg10/pgbackrest
pg1-host-port=22
pg1-host-user=postgres
pg1-host=sungsasong
pg1-port=10001
pg1-user=postgres
 
[global]
repo1-path=/pgbackrest/repos
repo1-retention-full=2
 
[global:archive_push]
compress-level=3

 

创建存储空间并检查配置

[postgres@sungsasong ~]$ pgbackrest –stanza=demo –log-level-console=info stanza-create
2021-01-08 20:42:58.887 P00 INFO: stanza-create command begin 2.31: –exec-id=9283-e9744c3e –log-level-console=info –pg1-host=sungsasong –pg1-host-config-path=/data/pg10/pgbackrest –pg1-host-port=22 –pg1-host-user=postgres –pg1-path=/data/pg10/pgdata –pg1-port=10001 –pg1-user=postgres –repo1-path=/pgbackrest/repos –stanza=demo
2021-01-08 20:42:59.835 P00 INFO: stanza-create command end: completed successfully (948ms)

 

检查配置

[postgres@sungsasong ~]$ pgbackrest –stanza=demo –log-level-console=info check
2021-01-08 21:41:29.851 P00 INFO: check command begin 2.31: –exec-id=21648-1862ac0d –log-level-console=info –pg1-path=/data/pg10/pgdata –pg1-port=10001 –pg1-user=postgres –repo1-path=/pgbackrest/repos –stanza=demo
2021-01-08 21:41:32.826 P00 INFO: WAL segment 000000010000000000000006 successfully archived to ‘/pgbackrest/repos/archive/demo/10-1/0000000100000000/000000010000000000000006-2f027934f4f35cd3983ca4b1b7b43c32ab089448.gz’
2021-01-08 21:41:32.826 P00 INFO: check command end: completed successfully (2975ms)

 

执行备份

默认为增量备份,增量备份将会请求一个基础全备,如果没有基础全备,增量备份将会变更到全备。

pgbackrest –stanza=demo –log-level-console=info backup
2021-01-08 21:43:55.014 P00 INFO: backup command begin 2.31: –exec-id=21661-13c54272 –log-level-console=info –pg1-path=/data/pg10/pgdata –pg1-port=10001 –pg1-user=postgres –repo1-path=/pgbackrest/repos –repo1-retention-full=2 –stanza=demo
WARN: no prior backup exists, incr backup has been changed to full

此处省略很多输出

2021-01-08 21:44:00.951 P00 INFO: full backup size = 23.3MB
2021-01-08 21:44:00.951 P00 INFO: execute non-exclusive pg_stop_backup() and wait for all WAL segments to archive
2021-01-08 21:44:01.153 P00 INFO: backup stop archive = 000000010000000000000008, lsn = 0/8000130
2021-01-08 21:44:01.154 P00 INFO: check archive for segment(s) 000000010000000000000008:000000010000000000000008
2021-01-08 21:44:01.273 P00 INFO: new backup label = 20210108-214355F
2021-01-08 21:44:01.301 P00 INFO: backup command end: completed successfully (6288ms)
2021-01-08 21:44:01.301 P00 INFO: expire command begin 2.31: –exec-id=21661-13c54272 –log-level-console=info –repo1-path=/pgbackrest/repos –repo1-retention-full=2 –stanza=demo
2021-01-08 21:44:01.304 P00 INFO: expire command end: completed successfully (3ms)

 

可以定义备份的类型为增量还是差异备份

使用—type参数指定

[postgres@sungsasong ~]$ pgbackrest –stanza=demo –log-level-console=info –type=diff backup
2021-01-08 21:47:00.964 P00 INFO: backup command begin 2.31: –exec-id=21671-d3f8f8bf –log-level-console=info –pg1-path=/data/pg10/pgdata –pg1-port=10001 –pg1-user=postgres –repo1-path=/pgbackrest/repos –repo1-retention-full=2 –stanza=demo –type=diff
2021-01-08 21:47:01.770 P00 INFO: last backup label = 20210108-214355F, version = 2.31
2021-01-08 21:47:01.770 P00 INFO: execute non-exclusive pg_start_backup(): backup begins after the next regular checkpoint completes
2021-01-08 21:47:02.309 P00 INFO: backup start archive = 00000001000000000000000A, lsn = 0/A000028
2021-01-08 21:47:03.617 P01 INFO: backup file /data/pg10/pgdata/global/pg_control (8KB, 99%) checksum 5f020e7df484269ea245041be3228673560184ef
2021-01-08 21:47:03.721 P01 INFO: backup file /data/pg10/pgdata/pg_logical/replorigin_checkpoint (8B, 100%) checksum 347fc8f2df71bd4436e38bd1516ccd7ea0d46532
2021-01-08 21:47:03.722 P00 INFO: diff backup size = 8KB
2021-01-08 21:47:03.722 P00 INFO: execute non-exclusive pg_stop_backup() and wait for all WAL segments to archive
2021-01-08 21:47:03.942 P00 INFO: backup stop archive = 00000001000000000000000A, lsn = 0/A0000F8
2021-01-08 21:47:03.943 P00 INFO: check archive for segment(s) 00000001000000000000000A:00000001000000000000000A
2021-01-08 21:47:04.062 P00 INFO: new backup label = 20210108-214355F_20210108-214701D
2021-01-08 21:47:04.092 P00 INFO: backup command end: completed successfully (3129ms)
2021-01-08 21:47:04.092 P00 INFO: expire command begin 2.31: –exec-id=21671-d3f8f8bf –log-level-console=info –repo1-path=/pgbackrest/repos –repo1-retention-full=2 –stanza=demo
2021-01-08 21:47:04.095 P00 INFO: expire command end: completed successfully (3ms)

 

备份信息查看

[postgres@sungsasong ~]$ pgbackrest info
stanza: demo
 status: ok
 cipher: none
 
 db (current)
 wal archive min/max (10-1): 000000010000000000000001/00000001000000000000000A
 
 full backup: 20210108-214355F
 timestamp start/stop: 2021-01-08 21:43:55 / 2021-01-08 21:44:01
 wal start/stop: 000000010000000000000008 / 000000010000000000000008
 database size: 23.3MB, backup size: 23.3MB
 repository size: 2.7MB, repository backup size: 2.7MB
 
 diff backup: 20210108-214355F_20210108-214701D
 timestamp start/stop: 2021-01-08 21:47:01 / 2021-01-08 21:47:03
 wal start/stop: 00000001000000000000000A / 00000001000000000000000A
 database size: 23.3MB, backup size: 8.2KB
 repository size: 2.7MB, repository backup size: 425B
 backup reference list: 20210108-214355F

 

还原一个备份

模拟数据库损坏

[postgres@sungsasong ~]$ cd $PGDATA/
[postgres@sungsasong pgdata]$ rm -rf *
#100分警告:千万不要拿生产库执行

 

执行还原

1[postgres@sungsasong pgdata]$ pgbackrest –stanza=demo restore

重新启动数据库

[postgres@sungsasong pgdata]$ pg_ctl start -D $PGDATA -l /tmp/logfile
waiting for server to start…. done
server started
[postgres@sungsasong pgdata]$ psql
psql (10.13)
Type “help” for help.

以上就是pgbackrest介绍及使用。当前使用的最新版本已经可以支持PostgreSQL13版本,仅仅是文档上标注支持最新到PostgreSQL11版本。感兴趣的同学可以下去试一下。

文章来源:脚本之家

来源地址:https://www.jb51.net/article/205393.htm

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/894028.html

(0)
上一篇 2025年1月3日 23:59:32
下一篇 2025年1月4日 00:00:07

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • SQLite 中文指南之FAQ第1/6页

    sqllite使用过程中碰到的一些问题解决,中文版 1. 如何创建自增字段? 2. SQLite 支持哪些数据类型? 3. 为什么能向 SQLite 数据库的整型字段中插入字符串? 4. 为什么 SQLite 认为表达式 ‘0&…

    数据库 2025年1月4日
    100
  • Access创建一个简单MIS管理系统

    所谓MIS管理系统,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统。MIS管理系统是一种新兴的技术,那么下文中就给大家介绍Access这个有历史的数据库系统如何创建一个简单的MIS管理系统。 M…

    数据库 2025年1月4日
    100
  • 读取注册表根据Office版本获取数据库连接字段

    本节主要介绍了如何根据Office版本获取数据库连接字段,以读取注册表获取Office版本,实现代码如下,感兴趣的朋友不要错过 /// /// 读取注册表,根据Office版本获取数据库连接字段 /// /// 数据库连接字段 privat…

    数据库 2025年1月4日
    100
  • PostgreSQL操作符实践技巧分享

    这篇文章主要给大家介绍了关于PostgreSQL基础知识之SQL操作符实践的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 操作符是数据库具有的…

    2025年1月4日
    100
  • SQL Server如何通过创建临时表遍历更新数据详解

    这篇文章主要给大家介绍了关于SQL Server如何通过创建临时表遍历更新数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前言: 前段时间新项目上线为了赶…

    2025年1月4日
    100
  • Mac系统重置PostgreSQL密码技巧及代码展示

    PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。这篇文章主要介绍了Mac系统重置PostgreSQL密码的方法示例代码,需要的朋友可以参考下 PostgreSQL是一种特性非常齐全的自由…

    数据库 2025年1月4日
    100
  • PostgreSQL技巧分享:图(graph)的递归查询实例

    这篇文章主要给大家介绍了关于PostgreSQL图(graph)的递归查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 背景 在树形递归查询这篇文…

    2025年1月4日
    100
  • PostgreSQL技巧 如何获取当前日期时间

    这篇文章主要介绍了PostgreSQL 如何获取当前日期时间及注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在开发数据库应用或者调试代码时,经常需要获取系统的…

    数据库 2025年1月4日
    100
  • postgresql中的ltree类型使用技巧

    这篇文章主要给大家介绍了关于postgresql中ltree类型使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用postgresql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 postgresql有很多比较妖…

    2025年1月4日
    100
  • MongoDB通配符索引的用法实例

    这篇文章主要给大家介绍了关于MongoDB通配符索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 指南 MongoDB在4.2 版本推出了Wildcard …

    数据库 2025年1月4日
    100

发表回复

登录后才能评论

联系我们

156-6553-5169

在线咨询: QQ交谈

邮件:253000106@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

联系微信