暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

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

原创 多米爸比 2022-11-03
1451

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()这两个函数已经没有用武之地,也被删除了。

保持联系

从2019年12月开始写第一篇文章,分享的初心一直在坚持,本人现在组建了一个PG乐知乐享交流群,欢迎关注我文章的小伙伴加我微信进群吹牛唠嗑,交流技术。

456.png

最后修改时间:2022-11-21 10:17:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论