在我们之前的文章——之一pgBackRest:一个伟大的备份解决方案,一年中增长我们讨论了pgBackRest安装和备份,快速恢复命令。最好能有一个恢复活动计划按照业务需求,以便备份验证并提供关键指标恢复时间。在这篇文章中,我们将查看一些恢复场景有关pgBackRest备份工具。
场景
- 恢复备份在不同的主机上
- 恢复一个数据库集群的Postgres
- 恢复备份到一个特定的时间点
- 恢复备份在一个不同的主机开始流备用
- 恢复只有δ的变化
继续测试上述恢复场景中,我们需要以下几点:
- pgBackRest相同版本的安装在源和目标机器
- 我库信息。e,我们存储备份的地方可能是S3, GCS, Azure桶,或者专门的存储。
- 目标服务器应该主机通过TLS或SSH访问存储库
对于测试上述场景,我有一个PostgreSQL主服务器,两个副本服务器,存储库服务器和备用服务器。
我的库信息:和增加备份存储库中可用。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
|
postgres
@
pgBackRest
:
~
美元
pgBackRest
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -日志- - - - - -水平- - - - - -控制台=细节
- - -节=演示
信息
节
:
演示
状态
:
好吧
密码
:
没有一个
db
(
当前的
)
细胞膜
存档
最小值/马克斯
(
11
)
:
00000001000000000000001 e/00000001000000000000002一个
完整的
备份
:
20221104- - - - - -102722 f
时间戳
开始/停止
:
2022年- - - - - -11- - - - - -04
10
:
27
:
22
/
2022年- - - - - -11- - - - - -04
10
:
27
:
32
细胞膜
开始/停止
:
000000010000000000000028
/
000000010000000000000028
数据库
大小
:
37.6 mb
,
数据库
备份
大小
:
37.6 mb
repo1
:
备份
集
大小
:
4.5 mb
,
备份
大小
:
4.5 mb
增加
备份
:
20221104- - - - - -102722 f_20221104- - - - - -102807我
时间戳
开始/停止
:
2022年- - - - - -11- - - - - -04
10
:
28
:
07年
/
2022年- - - - - -11- - - - - -04
10
:
28
:
12
细胞膜
开始/停止
:
00000001000000000000002一个
/
00000001000000000000002一个
数据库
大小
:
37.6 mb
,
数据库
备份
大小
:
8.3 kb
repo1
:
备份
集
大小
:
4.5 mb
,
备份
大小
:
402 b
备份
参考
列表
:
20221104- - - - - -102722 f
|
恢复备份在不同的主机上
在这个场景中,我们将测试备份恢复到备用服务器。我的备用服务器的配置信息的存储库pgBackRest主机,存储库路径,库主机用户,并要求PostgreSQL版本安装和访问存储库。
pgBackRest完全由命令行参数可以使用但是有一个配置文件有更多便利。下面是我的备用服务器pgBackRest配置文件。
|
1
2
3
4
5
6
7
8
|
postgres
@
spareserver
:
~
美元
猫
/等/pgbackrest/pgbackrest
. conf
(
全球
]
#回购细节
repo1- - - - - -路径= /pgrdbackups
#库存储脱轨
repo1- - - - - -主机=192.168.64.18
#库主机地址
repo1- - - - - -主机- - - - - -用户=postgres
#用户详细信息访问回购
(
演示
]
pg1- - - - - -路径= /var/自由/postgresql/11/主要
# data_dir路径恢复备份
|
我将继续和恢复备份可用在我库到备用服务器。默认情况下,它恢复存储库中可用的最新备份集。
|
1
2
3
4
5
6
7
8
9
10
11
|
postgres
@
spareserver
:
~
美元
pgbackrest
- - -配置= /等/pgbackrest/pgbackrest
. conf
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -节=演示
恢复
2022年- - - - - -11- - - - - -04
10
:
39
:
42.175
P00
信息
:
恢复
命令
开始
2.41
:
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -执行- - - - - -id=16557年- - - - - -1 a840ffa
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -pg1- - - - - -路径= /var/自由/postgresql/11/主要
- - -repo1- - - - - -主机=192.168.64.18
- - -repo1- - - - - -主机- - - - - -用户=postgres
- - -repo1- - - - - -路径= /pgrdbackups
- - -节=演示
2022年- - - - - -11- - - - - -04
10
:
39
:
42.959
P00
信息
:
repo1
:
恢复
备份
集
20221104- - - - - -102722 f_20221104- - - - - -102807我
,
复苏
将
开始
在
2022年- - - - - -11- - - - - -04
10
:
28
:
07年
2022年- - - - - -11- - - - - -04
10
:
39
:
50.104
P00
信息
:
写
/var/自由/postgresql/11/主要/复苏
. conf
2022年- - - - - -11- - - - - -04
10
:
39
:
50.116
P00
信息
:
恢复
全球/pg_control
(
执行
去年
来
确保
流产
恢复
不能
是
开始
)
2022年- - - - - -11- - - - - -04
10
:
39
:
50.124
P00
信息
:
恢复
大小
=
37.6 mb
,
文件
总
=
1535年
2022年- - - - - -11- - - - - -04
10
:
39
:
50.125
P00
信息
:
恢复
命令
结束
:
完成
成功
(
7954毫秒
)
<
改变
archive_commad
在
的
备用
服务器
>
和
开始
的
数据库
pg_ctl
- - - - - -D
<
data_dir
>
开始
|
我们需要确保archive_command改变到另一个路径或禁用防止Postgres档案写入现有的回购在备用服务器上开始。
恢复一个数据库集群的Postgres
在这个场景中,我们将只恢复一个数据库在备用服务器上。我下面提到的数据库在我的主数据库。
主服务器:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
postgres=# l
列表
的
数据库
的名字
|
老板
|
编码
|
核对
|
Ctype
|
访问
特权
- - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mydb
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
雷竞技下载官网
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
postgres
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
template0
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
=c/postgres
+
|
|
|
|
|
postgres=CTc/postgres
template1
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
=c/postgres
+
|
|
|
|
|
postgres=CTc/postgres
postgres=# l +雷竞技下载官网 percona
列表
的
数据库
的名字
|
老板
|
编码
|
核对
|
Ctype
|
访问
特权
|
大小
|
表空间
|
描述
- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - -
雷竞技下载官网
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
|
157年
MB
|
pg_default
|
我们将恢复只有Percona数据库备用服务器。雷竞技下载官网
|
1
2
3
4
5
6
7
|
postgres
@
spareserver
:
~
美元
pgbackrest
- - -配置= /等/pgbackrest/pgbackrest
. conf
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -节=演示
- - -db- - - - - -包括=雷竞技下载官网
恢复
2022年- - - - - -11- - - - - -04
10
:
58
:
05.869
P00
信息
:
恢复
命令
开始
2.41
:
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -db- - - - - -包括=雷竞技下载官网
- - -执行- - - - - -id=16647年- - - - - -4 f3aa57d
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -pg1- - - - - -路径= /var/自由/postgresql/11/主要
- - -repo1- - - - - -主机=192.168.64.18
- - -repo1- - - - - -主机- - - - - -用户=postgres
- - -repo1- - - - - -路径= /pgrdbackups
- - -节=演示
2022年- - - - - -11- - - - - -04
10
:
58
:
07.088
P00
信息
:
repo1
:
恢复
备份
集
20221104- - - - - -105706 f
,
复苏
将
开始
在
2022年- - - - - -11- - - - - -04
10
:
57
:
06
2022年- - - - - -11- - - - - -04
10
:
58
:
15.791
P00
信息
:
写
/var/自由/postgresql/11/主要/复苏
. conf
2022年- - - - - -11- - - - - -04
10
:
58
:
15.805
P00
信息
:
恢复
全球/pg_control
(
执行
去年
来
确保
流产
恢复
不能
是
开始
)
2022年- - - - - -11- - - - - -04
10
:
58
:
15.816
P00
信息
:
恢复
大小
=
187.4 mb
,
文件
总
=
1548年
2022年- - - - - -11- - - - - -04
10
:
58
:
15.817
P00
信息
:
恢复
命令
结束
:
完成
成功
|
开始Postgres集群备用服务器并检查Percona数据库。雷竞技下载官网
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
|
postgres
@
spareserver
:
~
美元
pg_ctlcluster
11
主要
开始
postgres
@
spareserver
:
~
美元
psql
postgres
psql
(
14.5
(
Ubuntu
2
:
14.5- - - - - -3.适意的
)
,
服务器
11.17
(
Ubuntu
2
:
11.17- - - - - -3.适意的
)
)
类型
“帮助”
为
帮助
。
postgres=# l
列表
的
数据库
的名字
|
老板
|
编码
|
核对
|
Ctype
|
访问
特权
- - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mydb
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
雷竞技下载官网
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
postgres
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
template0
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
=c/postgres
+
|
|
|
|
|
postgres=CTc/postgres
template1
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
=c/postgres
+
|
|
|
|
|
postgres=CTc/postgres
postgres=# l +雷竞技下载官网 percona
列表
的
数据库
的名字
|
老板
|
编码
|
核对
|
Ctype
|
访问
特权
|
大小
|
表空间
|
描述
- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - -
雷竞技下载官网
|
postgres
|
use UTF8
|
C
.UTF- - - - - -8
|
C
.UTF- - - - - -8
|
|
157年
MB
|
pg_default
|
|
恢复特定数据库后你仍然可以看到其他用户数据库。然而,当用户将尝试连接到(即除了与-db-include选项指定的数据库)连接不会发生,用户会得到一个致命错误:“致命的:关系映射文件”基地/ xx / pg_filenode。地图包含无效数据。
恢复备份到一个特定的时间点
与pgBackRest时间点恢复是可能的,考虑一个表或数据库已经下降,需要恢复。在这种情况下,我们需要把事件的时间戳,pgBackRest备份和归档。
在我的主节点,我有一个名为pitr在Percona数据库的表。雷竞技下载官网此表已在时间戳2022-11-04 14:24:32.231309 + 05:30下降。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
雷竞技下载官网=# dt + pitr
列表
的
关系
模式
|
的名字
|
类型
|
老板
|
持久性
|
大小
|
描述
- - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - -
公共
|
pitr
|
表
|
postgres
|
永久
|
8192年
字节
|
(
1
行
)
雷竞技下载官网=#选择现在();drop table pitr;
现在
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2022年- - - - - -11- - - - - -04
14
:
24
:
32.231309+05年
:
30.
(
1
行
)
下降
表
雷竞技下载官网=#选择pg_switch_wal ();
pg_switch_wal
- - - - - - - - - - - - - - - - - -
0/7 b0162a0
(
1
行
)
|
通过使用pgBackRest恢复选项恢复类型命令我们可以实现Point-In-Time-Recovery,默认情况下这个类型恢复档案的流,在这个场景中,我们将指定表的确切时间戳来恢复,xid和lsn也可以提供给类型命令。
|
1
2
3
4
5
6
7
|
pgbackrest
- - -配置= /等/pgbackrest/pgbackrest
. conf
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -节=演示
- - -db- - - - - -包括=雷竞技下载官网
- - -类型=时间
”——目标= 2022-11-04 14:24:31”
恢复
2022年- - - - - -11- - - - - -04
14
:
35
:
35.389
P00
信息
:
恢复
命令
开始
2.41
:
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -db- - - - - -包括=雷竞技下载官网
- - -执行- - - - - -id=17804年- - - - - -ca30e9a3
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -pg1- - - - - -路径= /var/自由/postgresql/11/主要
- - -repo1- - - - - -主机=192.168.64.18
- - -repo1- - - - - -主机- - - - - -用户=postgres
- - -repo1- - - - - -路径= /pgrdbackups
- - -节=演示
- - -目标=“2022-11-04 14:24:31”
- - -类型=时间
2022年- - - - - -11- - - - - -04
14
:
35
:
36.279
P00
信息
:
repo1
:
恢复
备份
集
20221104- - - - - -105706 f
,
复苏
将
开始
在
2022年- - - - - -11- - - - - -04
10
:
57
:
06
2022年- - - - - -11- - - - - -04
14
:
35
:
44.054
P00
信息
:
写
/var/自由/postgresql/11/主要/复苏
. conf
2022年- - - - - -11- - - - - -04
14
:
35
:
44.069
P00
信息
:
恢复
全球/pg_control
(
执行
去年
来
确保
流产
恢复
不能
是
开始
)
2022年- - - - - -11- - - - - -04
14
:
35
:
44.084
P00
信息
:
恢复
大小
=
187.4 mb
,
文件
总
=
1548年
2022年- - - - - -11- - - - - -04
14
:
35
:
44.086
P00
信息
:
恢复
命令
结束
:
完成
成功
|
启动Postgres集群并检查pitr表。
|
1
2
3
4
5
6
|
postgres
@
spareserver
:
~
美元
pg_ctlcluster
11
主要
开始
雷竞技下载官网=# dt pitr
列表
的
关系
模式
|
的名字
|
类型
|
老板
- - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - -
公共
|
pitr
|
表
|
postgres
|
恢复备份在一个不同的主机开始流备用
这种方法将有用的情况下,我们需要重建坠毁的备用节点或添加一个新的备用现有集群Postgres。
主服务器:
两个副本服务器连接到主服务器。
|
1
2
3
4
5
6
|
postgres=#选择usename client_addr sync_state,从pg_catalog.pg_stat_replication状态
;
usename
|
client_addr
|
sync_state
|
状态
- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - -
repl
|
192.168.64.16
|
异步
|
流媒体
repl
|
192.168.64.17
|
异步
|
流媒体
|
让我们继续,使用pgBackRest添加另一个副本。
|
1
2
3
4
5
6
7
|
postgres
@
spareserver
:
~/11/主要
美元
pgbackrest
- - -配置= /等/pgbackrest/pgbackrest
. conf
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -节=演示
- - -类型=备用
- - -复苏- - - - - -选项=primary_conninfo=“用户= repl密码= <编辑>主机= 192.168.64.10 application_name =空闲'
恢复
2022年- - - - - -11- - - - - -04
15
:
02
:
49.142
P00
信息
:
恢复
命令
开始
2.41
:
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -执行- - - - - -id=18057年- - - - - -b13cb8f4
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -pg1- - - - - -路径= /var/自由/postgresql/11/主要
- - -复苏- - - - - -选项=“primary_conninfo =用户= repl密码=测试主机= 192.168.64.10 application_name =备用”
- - -repo1- - - - - -主机=192.168.64.18
- - -repo1- - - - - -主机- - - - - -用户=postgres
- - -repo1- - - - - -路径= /pgrdbackups
- - -节=演示
- - -类型=备用
2022年- - - - - -11- - - - - -04
15
:
02
:
49.642
P00
信息
:
repo1
:
恢复
备份
集
20221104- - - - - -105706 f
,
复苏
将
开始
在
2022年- - - - - -11- - - - - -04
10
:
57
:
06
2022年- - - - - -11- - - - - -04
15
:
02
:
57.767
P00
信息
:
写
/var/自由/postgresql/11/主要/复苏
. conf
2022年- - - - - -11- - - - - -04
15
:
02
:
57.778
P00
信息
:
恢复
全球/pg_control
(
执行
去年
来
确保
流产
恢复
不能
是
开始
)
2022年- - - - - -11- - - - - -04
15
:
02
:
57.791
P00
信息
:
恢复
大小
=
187.4 mb
,
文件
总
=
1548年
2022年- - - - - -11- - - - - -04
15
:
02
:
57.792
P00
信息
:
恢复
命令
结束
:
完成
成功
|
复制服务器启动并运行,检查pg_stat_replication主节点。
|
1
2
3
4
5
6
7
8
|
postgres=#选择usename client_addr sync_state,从pg_catalog.pg_stat_replication状态
;
usename
|
client_addr
|
sync_state
|
状态
- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - -
repl
|
192.168.64.16
|
异步
|
流媒体
repl
|
192.168.64.17
|
异步
|
流媒体
repl
|
192.168.64.19
|
异步
|
流媒体
(
3
行
)
|
恢复只有δ的变化
三角洲选项允许pgBackRest自动确定哪些数据库集群目录中的文件可以保留,哪些需要从备份中恢复,认为这种情况我们已经有一个备用服务器上的备份恢复,现在我们将再次执行δ在备用服务器上恢复得到δ数据备份自上次恢复。
|
1
2
3
4
5
6
7
8
|
postgres
@
spareserver
:
~
美元
pg_ctlcluster
11
主要
停止
postgres
@
spareserver
:
~
美元
pgbackrest
- - -配置= /等/pgbackrest/pgbackrest
. conf
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -节=演示
- - -δ
恢复
2022年- - - - - -11- - - - - -04
15
:
36
:
57.101
P00
信息
:
恢复
命令
开始
2.41
:
- - -配置= /等/pgBackRest/pgBackRest
. conf
- - -δ
- - -执行- - - - - -id=18175年- - - - - -ac9d25dc
- - -日志- - - - - -水平- - - - - -控制台=信息
- - -pg1- - - - - -路径= /var/自由/postgresql/11/主要
- - -repo1- - - - - -主机=192.168.64.18
- - -repo1- - - - - -主机- - - - - -用户=postgres
- - -repo1- - - - - -路径= /pgrdbackups
- - -节=演示
2022年- - - - - -11- - - - - -04
15
:
36
:
58.130
P00
信息
:
repo1
:
恢复
备份
集
20221104- - - - - -153559 f
,
复苏
将
开始
在
2022年- - - - - -11- - - - - -04
15
:
35
:
59
2022年- - - - - -11- - - - - -04
15
:
36
:
58.136
P00
信息
:
删除
无效的
文件/链接/路径
从
' / var / lib / postgresql / 11 /主要的
2022年- - - - - -11- - - - - -04
15
:
37
:
04.155
P00
信息
:
写
/var/自由/postgresql/11/主要/复苏
. conf
2022年- - - - - -11- - - - - -04
15
:
37
:
04.168
P00
信息
:
恢复
全球/pg_control
(
执行
去年
来
确保
流产
恢复
不能
是
开始
)
2022年- - - - - -11- - - - - -04
15
:
37
:
04.181
P00
信息
:
恢复
大小
=
202.2 mb
,
文件
总
=
2136年
|
总的来说,pgBackRest是一个非常流行的开源数据库备份工具可供PostgreSQL。我们也鼓励你尝试我们的产品raybet52 ,因为pgBackRest工具是我们分布备份的一部分。







嗨@Bhargav,祝贺你的第一个博客。我已经通过,它有很多数据与pgbackrest效用玩耍。这将有利于dba在常规备份操作。谢谢你的努力。
这是一个常见的用例企业刷新预生产系统从生产上定期的基础上,例如每天。备份完成了迄今为止在预生产系统也应该保持能够做一个时间点恢复之前如果需要刷新。
我想实现这个通过恢复备份在不同主机上“定期。我总是得到”“错误:[045]:细胞膜文件已经存在于repo1存档用不同的校验和”从“archive-push”当我使用相同的repo1之后。
我必须重新创建pgbackrest节与一个不同的名称来得到一个新的空repo1解决这个错误。这也意味着我得重新配置pgbackrest设置使用旧节之前恢复。不是很好。
任何想法吗?
任何人都可以解释δ在pgBackRest是什么和给我的用例使用三角洲选项?,我还是不明白三角洲选项虽然我读过一些文档
非常感谢你