首页 > 数据库 >PostgreSQL备份版本差异分析

PostgreSQL备份版本差异分析

时间:2024-08-11 15:39:37浏览次数:8  
标签:PostgreSQL recovery 备份 参数 postgresql conf 版本 target

PostgreSQL备份版本差异分析

PostgreSQL V12中没有了recovery.conf
从向后兼容的观点来看,PostgreSQL v12中最大的变化是recovery.conf文件中的参数放到了postgresql.conf配置文件中。

放弃recovery.conf
在PG12以前,如果数据目录存在recovery.conf文件,当PG实例启动时将进入恢复模式(recovery或standby),该文件包含了用于配置恢复的所有参数,例如:
standby_mode:确定这是正常的归档恢复还是standby模式
restore_command:此命令恢复已归档的WAL段
recovery_target*:此参数确定要恢复到的点
primary_conninfo:如何连接到流复制主服务器
长期以来,recovery.conf一直被认为是一个缺陷,因为配置参数分布在多个不同的文件中是不合理的,另外还不能使用ALTER SYSTEM命令对参数进行修改。

从v12开始,针对此问题进行了改进,把recovery.conf中的参数合到了postgresql.conf配置文件中,但在非恢复模式这些参数将被忽略。

1. 如何告诉PostgreSQL进入恢复模式?

在PG12以前,recovery.conf该文件的存在即触发恢复模式。
从PG12开始,由于该文件不存在,由下面两个新文件进行替换:
recovery.signal:告诉PostgreSQL进入正常的归档恢复
standby.signal:告诉PostgreSQL进入standby模式
如果两个文件都存在,则standby.signal优先。
这些文件不需要包含任何数据,存在的任何数据将被忽略,只要存在就有意义。如果提升了备用数据库,则将完全删除standby.signal(而不是像recovery.conf那样重命名,变成recovery.done)。同样,如果正在进行时间点恢复,则一旦达到恢复目标,recovery.signal将被删除(除非将recovery_target_action设置为shutdown)。请注意:与recovery.conf一样,目录中缺少这些文件将导致PostgreSQL实例立即作为主实例启动,无论postgresql.conf是否包含复制配置。

2. 恢复参数有哪些变化?

先前存储在recovery.conf中的恢复配置参数大部分没有变化,但以下情况除外。
standby_mode:先前的参数standby_mode已被删除,并已由上述standby.signal和recovery.signal文件代替。
trigger_file:参数trigger_file已重命名为promote_trigger_file(注意:可用版本为12-15,16版本已经删除此参数,可以使用pg_ctl promote 或 pg_promote() )。
在PG12以前,要将更改应用于recovery.conf,需要完全重启服务器。尽管这对PG12及以上版本也是正确的,但是现在可以通过SIGHUP更改以下恢复配置项:
archive_cleanup_command
promote_trigger_file
recovery_end_command
recovery_min_apply_delay
以下查询列出了所有以前的recovery.conf参数:

SELECT name,
       setting,
       category,
       short_desc,
       CONTEXT,
       pending_restart
  FROM pg_catalog.pg_settings
 WHERE category IN('Write-Ahead Log / Archive Recovery', 'Write-Ahead Log / Recovery Target')
    OR name IN ('primary_conninfo', 'primary_slot_name', 'promote_trigger_file', 'recovery_min_apply_delay')
 ORDER BY category,
          name;

3. 恢复完成后参数会发生什么变化?

在PG12以前,恢复完成,recovery.conf被重命名为recovery.done,这有效地删除了恢复参数。
从PG12开始,恢复完成后将删除recovery.signal或standby.signal文件,但其中的参数postgresql.conf仍然保留。只要PostgreSQL不在恢复中,它们就会被忽略,但是最好用“#”注释禁用它们。这样可以避免以后出现令人讨厌的意外情况,例如在创建备用服务器时。
如果需要设置这些恢复参数建议使用ALTER SYSTEM,如果需要重置它们建议使用ALTER SYSTEM RESET。

4. 在使用pg_basebackup工具时,如果使用了"–write-recovery-conf"选项会怎样?

在PG12中,选项仍然存在,但是它不再是创建recovery.conf文件,而是添加恢复配置参数。
与其将参数添加到postgresql.conf,不如和ALTER SYSTEM一样将其添加到postgresql.auto.conf。

5. 如果我在PG12中使用recovery.conf进行恢复会发生什么?

PostgreSQL 12数据目录中的存在recovery.conf,将导致PostgreSQL实例拒绝启动,并出现以下错误:
FATAL: using recovery command file “recovery.conf” is not supported

6. 如何调整我的备份脚本?

备份不受更改的影响。因此,您的备份脚本无需修改。
执行归档恢复或设置备用服务器的脚本必须进行修改。主要困难将是添加必要的恢复参数。
我的建议是将参数添加到postgresql.auto.conf,因为如前所述,该文件是为自动编辑而制作的。
这是bash要添加的一些示例代码recovery_target_time:

sed -i "/^recovery_target/d" $PGDATA/postgresql.auto.conf
sed -i "$ a recovery_target_time = '2020-05-19 13:00:00'" $PGDATA/postgresql.auto.conf

首先删除所有以"recovery_target"开头的选项,然后添加参数。
启动服务器之前,请不要忘记执行以下操作:
touch $PGDATA/recovery.signal
我建议您在恢复完成后再次删除恢复参数。

7. 我正在使用一些第三方备份软件-我该怎么办?

到现在为止,任何值得其使用的专用PostgreSQL备份软件都应该已经适应了这些更改,升级到当前版本。
PostgreSQL v12对最广泛使用的程序的支持:
pgBackRest:支持2.18版以上的v12
pg_probackup:支持从2.2.5版本开始的v12
Barman:支持2.9版以上的v12

8. 有哪些需要注意的事项?

从表面上看,与管理其它参数一样,但是在行为上发生了一些潜在的改变。

  • ALTER SYSTEM设置始终优先处理
    如果恢复设置存储在postgresql.conf中,并且有人通过执行ALTER SYSTEM来更改设置,则ALTER SYSTEM设置的参数(并写入postgresql.auto.conf)将始终优先。如果随后尝试更新postgresql.conf中的复制设置,并且未考虑设置也可能存在于postgresql.auto.conf中的可能性,则可能引起混乱,这也是上面再三建议写入postgresql.auto.conf文件
  • 恢复配置设置甚至可以在主服务器上出现
    任何已配置的恢复配置设置(例如primary_conninfo)都将由PostgreSQL读取,并且可以正常显示,但是它们的存在并不表示该节点是否为备节点。
  • 没有固定的位置可以配置恢复参数
    众所周知recovery.conf只有一个文件,可以写入恢复设置,这可以确保在服务器启动时可以读取它们。但从PG12开始,恢复设置可以位于具有常规PostgreSQL配置文件的任何位置。由于最后读取的配置参数具有优先权,因此有可能会忽略前面的参数,并且使用错误的设置会错误地启动PostgreSQL。编写恢复配置设置(例如pg_basebackup或repmgr)并且需要确保最后读取这些设置,因此需要将它们添加到postgresql.auto.conf文件中。
  • 信号文件混乱的风险
    由于已将standby_mode参数替换为创建两个信号文件之一,并且由于standby.signal的优先级高于recovery.signal,因此存在需要恢复时,设置了recovery.signal,但同时存在standby.signal文件导致恢复错误。
  • 只能指定recovery_target类中的一个参数
    如果PostgreSQL配置中存在多个recovery_target\recovery_target_lsn\recovery_target_name\recovery_target_time\recovery_target_xid之一,则实例将发出致命错误在启动时:
FATAL: multiple recovery targets specified
DETAIL: At most one of recovery_target, recovery_target_lsn, recovery_target_name, recovery_target_time, recovery_target_xid may be set.

在PG12以前,使用这些参数中的最后一个,而忽略了之前的参数。

标签:PostgreSQL,recovery,备份,参数,postgresql,conf,版本,target
From: https://www.cnblogs.com/zreo2home/p/18353480

相关文章

  • PostgreSQL的WAL日志详解
    PostgreSQL的WAL日志详解1.WAL日志介绍1.1WAL介绍wal日志即writeaheadlog预写式日志,简称wal日志。wal日志可以说是PostgreSQL中十分重要的部分,相当于oracle中的redo日志。当数据库中数据发生变更时:change发生时:先要将变更后内容计入walbuffer中,再将变更后的数据写入data......
  • PostgreSQL一主一从高可用搭建
    1.PostgreSQL一主一从高可用搭建(VIP)IP主机名角色192.168.198.146test11主服务器192.168.198.143test12备用服务器192.168.198.144test13见证服务器一、基本环境配置1、hosts文件配置(所有节点)vim/etc/hosts#新增192.168.198.146msp-app01192......
  • 轻松找回:如何在PostgreSQL 16中重置忘记的数据库密码
    目录1.引言2.PostgreSQL16的新特性简介3.解决方法概述4.方法一:通过修改`pg_hba.conf`文件重置密码5.方法二:通过命令行进入单用户模式6.方法三:使用pgAdmin工具重置密码7.总结与最佳实践写在以后1.引言你有没有过这样的经历?当你满怀期待地打开电脑准备工作时,......
  • 《C#面向语言版本编程》C# 13 中的新增功能
    将C#语言版本升级为预览版C#13包括一些新增功能。可以使用最新的VisualStudio2022版本或.NET9预览版SDK尝试这些功能。若想在.NET项目中尝试使用C#的最新预览版特性,可以按照以下步骤来升级你的项目语言版本:.打开项目文件:找到并打开您的.csproj项目文件。......
  • 240730-PostgreSQL的逻辑备份与物理备份
    PostgreSQL的逻辑备份与物理备份简介制定备份和恢复计划是每一个DBA最重要的工作之一,它决定了数据的有效性和完整性。也可以搭建跨越不同数据中心的流复制集群,能有效的帮助你避免单点故障。但是只有一份有效的备份能够帮助从delete或者drop的误操中恢复数据。制定备份和恢复计......
  • 文件级系统备份
    文件级系统备份另一种备份策略是直接复制PostgreSQL用于将数据存储在数据库中的文件;第19.2节说明了这些文件的位置。您可以使用自己喜欢的任何方法进行文件系统备份;例如tar-cfbackup.tar/usr/local/pgsql/data然而,有两个限制,使得此方法不切实际,或至少不如pg_dump方......
  • PostgreSQL的查询详解
    PostgreSQL的查询详解1.表表达式表表达式计算一个表。该表表达式包含一个FROM子句,该子句后面可以根据需要选用WHERE、GROUPBY和HAVING子句。最简单的表表达式只是引用磁盘上的一个表,一个所谓的基本表,但是我们可以用更复杂的表表达式以多种方法修改或组合基本表。表表达......
  • PostgreSQL的体系结构
    1.体系架构1、应用程序访问接口整个应用架构中,Postgresql数据库位于操作系统和应用程序之间,不同的编程语言使用不同的驱动程序链接到Postgresql数据库上,驱动分为两类:1.使用纯语言实现的Postgresql驱动,如JDBC、.NET等方式,这种链接方式不需要libpq库。2.通过包装Postgresql的......
  • PostgreSQL的数据类型
    PostgreSQL的数据类型1.布尔类型1.1布尔值对应表在Postgresql数据库中Boolean的值除了“true”(真)、“false”(假),还有一个“unknown”(未知)状态。如果是unknown时用NULL表示。布尔类型在Postgresql中可以用不带引号的TRUE或FALSE表示,也可以用更多表示真和假的带引号的字符表示:......
  • PostgreSQL的物理备份
    PostgreSQL的物理备份1.简单了解1.1pg_basebackup备份1.1.1简介pg_basebackup是从postgresql9.1版本开始提供的一个方便基础备份的工具。pg_basebackup用于对正在运行的PostgreSQL数据库集群进行基本备份。备份是在不影响数据库的其他客户端的情况下进行的,并且可以用于时......