PG启动恢复机制「终于解决」

PG启动恢复机制「终于解决」生产一个pg库停了后,起库的时候则需要很长时间,记录一下相应的原理。 如backup_label文件不存在(当前没有在做备份),正情况情况下, 在恢复的开始, 服务器首先读取pg_control,然…

PG启动恢复机制

生产一个pg库停了后,起库的时候则需要很长时间,记录一下相应的原理。

  1. 如backup_label文件不存在(当前没有在做备份),正情况情况下, 在恢复的开始, 服务器首先读取pg_control,然后读取检查点记录; 接着它通过从检查点记录里标识的日志位置开始向前扫描执行 REDO操作。 因为数据页的所有内容都保存在检查点之后的第一个页面修改的日志里(假设full_page_writes没有被禁用), 所以自检查点以来的所有变化的页都将被恢复到一个一致的状态
  2. 数据库正做备份,pg库宕机了,此时数据目录会生成backup_label文件,则会读取backup_lable 中的check_point 点,以及备份期间记录的相应日志,对于这个文件的描述如下: 见src/backend/access/transam/xlog.c

/*
* read_backup_label: check to see if a backup_label file is present
*
* If we see a backup_label during recovery, we assume that we are recovering
* from a backup dump file, and we therefore roll forward from the checkpoint
* identified by the label file, NOT what pg_control says. This avoids the
* problem that pg_control might have been archived one or more checkpoints
* later than the start of the dump, and so if we rely on it as the start
* point, we will fail to restore a consistent database state. 

代码100分

backup_label 文件的内容如下:

代码100分
START WAL LOCATION: 472D/82000028 (file 000000060000472D00000082)
CHECKPOINT LOCATION: 472D/82150EB8
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2020-05-23 07:23:18 HKT
LABEL: 2020-05-23 07:23:17 with pg_rman

 在这种情况下,如果有pg_xlog或pg_wal 下面没有相应的 从pg_start_backup()以来的 日志启库时会报错,需要确认是不是恢复备份,如果不是则要remove backup_label 文件。

LOG: could not open file “pg_xlog/000000020000000000000084” (log file 0, segment 132): No such file or directory
LOG: invalid checkpoint record
PANIC: could not locate required checkpoint record
HINT: If you are not restoring from a backup, try removing the file “/POSTGRES/data/PG820/backup_label”.

生产环境中,如果备份有很多归档日志,起库的时候则需要很长时间。

参考:https://www.postgresql.org/message-id/D960CB61B694CF459DCFB4B0128514C293CEB7@exadv11.host.magwien.gv.at

 

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

(0)
上一篇 2023-03-19
下一篇 2023-03-19

相关推荐

  • SQL Server – 监控[亲测有效]

    SQL Server – 监控[亲测有效]当数据库出现性能异常时,如何找出引起性能问题的SQL? SQL Server自带trace & event只能抓取已执行完成的SQL,且无法抓取SQL运行过程中的状态信息 通过SQL Serv

    2023-03-23
    115
  • linux 学习 mysql安装到连接

    linux 学习 mysql安装到连接目录 下载与安装 1.方法一(本地翻墙) 2.方法二(本地不翻墙) 初始化和配置 1.初始化mysql 2.远程访问的设置 3.用户组权限的修改 ps:一般mysql安装后会在/var/log/下面生

    2023-02-06
    105
  • TIDB在win10安装_sql语句慢查询

    TIDB在win10安装_sql语句慢查询关系型数据库的 DBA 日常肯定遇到过这样的一种场景:SQL 执行计划选择错误,这类问题的危害是很大的,常常导致业务突然卡顿,数据库过载等不良后果。 举个例子,假设我们有这么一张表: 其中,姓名和性…

    2023-02-10
    103
  • 使用Python for循环轻松迭代序列

    使用Python for循环轻松迭代序列Python语言中for循环是一种用来遍历各种序列类型的迭代工具,极大地简化了程序员的工作。在本文中,我们将深入探讨此功能并展示如何用Python语言进行循环迭代。

    2023-12-09
    61
  • 52兔思网的web服务文件做好时刻与机器同步的几个步骤浅析[通俗易懂]

    52兔思网的web服务文件做好时刻与机器同步的几个步骤浅析[通俗易懂]在52兔思网www.52tusi.com里面,我们经常会在北京男士休闲会馆网里面搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机中的环境,重新搭建一个同样的环境。 要求: a)实现web服务文…

    2023-03-03
    98
  • Mysql复习

    Mysql复习DDL(DATA Definition language) 数据定义语言,用来定义数据库对象:库、表、列、等 数据库或表的结构操作 操作数据库 查看所有数据库:SHOW DATABASE; 切换数据…

    2023-02-02
    91
  • Python 中的 Amount 和 Number:如何正确使用?

    Python 中的 Amount 和 Number:如何正确使用?在 Python 中,我们经常涉及到 Amount(数量) 和 Number(数字) 的概念,它们是很基础也很重要的数据类型。在处理数据时,正确使用 Amount 和 Number,可以有效提高程序的效率、减少代码的复杂性。

    2024-01-16
    55
  • 外键有什么用_外键可以重复吗

    外键有什么用_外键可以重复吗这篇主要说明表属性 – 外键。 外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在操作上的一致性与完整性。 外键在大部分企业写的开发规范里会**直接规避掉!**外键有优缺点,也并不是说每种场…

    2023-03-05
    100

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注