ITPub博客

首页 > 数据库 > PostgreSQL > PostgreSQL 15可靠性之统一非排他性备份模式

PostgreSQL 15可靠性之统一非排他性备份模式

原创 PostgreSQL 作者:u_aa03cac0d7fc 时间:2024-04-06 11:07:54 0 删除 编辑

PostgreSQL 15版本在可靠性方面有不少改进,上一篇文章介绍了本地化规则的改进: <<PostgreSQL 15可靠性之本地化规则改进>>,本文将介绍另外一个关于备份模式的改进。

在介绍备份模式之前我们先了解一下备份函数名称在PostgreSQL 15的变化,大家如果有使用自定义脚本调用过备份函数做备份时,在PostgreSQL 15之前是下面的两个函数:

  • pg_start_backup()
  • pg_stop_backup()

从PostgreSQL 15开始名称变为:

  • pg_backup_start()
  • pg_backup_stop()

这样命名之后,方便进行TAB补全,也容易搜索和识记,不过重命名主要是为了区分以前的独占模式。

在PostgreSQL 15里我们如果仔细观察pg_backup_start()和pg_backup_stop()函数的参数列表,可以对比发现排他性备份模式"exclusive"参数消失了。

image.png

排他性备份模式一直以来并不被推荐使用,它带来最大的问题是如果数据库服务器在这种模式突然停止时,服务器可能无法随后启动。

因为排他性备份下,系统会在数据目录创建一个backup_label备份标签文件,其中包含启动备份的最新检查点位置。这能确保在启动服务时不会从控制文件pg_control中读取检查点位置。

但是它可能会导致数据损坏,因为备份可能包含该检查点之前的数据文件。系统业务如果比较繁忙,pg_wal目录中的WAL可能已经被归档和回收。随后服务启动将失败,此时必须手动删除备份中的标签文件才能重新启动数据库服务。

从PostgreSQL 15开始,删除了排他性备份模式,非排他性备份模式下通过pg_backup_stop函数返回检查点及表空间映射等信息,而不在数据目录中创建。

postgres=# select pg_backup_stop();
                               pg_backup_stop                                
------------------------------------------------------------------------
 (0/83000138,"START WAL LOCATION: 0/83000060 (file 000000010000000000000083)+
 CHECKPOINT LOCATION: 0/83000098                                            +
 BACKUP METHOD: streamed                                                    +
 BACKUP FROM: primary                                                       +
 START TIME: 2022-11-21 08:42:34 CST                                        +
 LABEL: mybak1                                                              +
 START TIMELINE: 1                                                          +
 ","")
(1 row)

但是在备份期间需要保持数据库连接的连续性,如果客户端在进行备份时连接断开则备份将中止。

同时与独占模式相关的pg_is_in_backup()和pg_backup_start_time()这两个函数已经没有用武之地,也被删除了。

保持联系

本人组建了一个技术交流群:PG乐知乐享交流群。欢迎关注文章的小伙伴随缘加入,进群请加本人微信skypkmoon并备注PG乐知乐享。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69978456/viewspace-3011562/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-06-12

  • 博文量
    102
  • 访问量
    50370