1. 强制状态机切换(身份定义)

  • 作用:当数据库启动(Startup 进程唤醒)时,它会首先检查数据目录($PGDATA)下是否存在这个文件。
  • 机制
    • 存在:内核立刻意识到“我现在是一个不完整的备份克隆体”,从而进入 Archive Recovery(归档恢复) 状态。
    • 不存在:内核认为这是一次正常的断电重启,进入普通的 Crash Recovery(崩溃恢复) 状态。

2. 物理级读写保护锁(防损坏)

  • 作用:它是保护 5TB 备份数据不被二次破坏的“免战牌”。
  • 机制:由于物理备份的数据通常包含“半新半旧”的撕裂页,在没有通过重放 WAL 日志完全治愈之前,数据是极度不一致的。recovery.signal 的存在,会强制内核锁死 5432 端口,在恢复完成前绝对禁止任何普通业务连接进来写入数据。如果不建这个文件直接开机,撕裂的数据会被新写入的数据永久固化,导致备份彻底报废。

3. 激活恢复参数(触发动机)

  • 作用:它是激活 postgresql.conf 中所有 recovery_* 相关参数的“引线”。
  • 机制:只有当 recovery.signal 存在时,内核才会去主动读取并执行 restore_command(去远端拉取日志)、recovery_target_time(设置停止时间点)等特定配置。如果没有这个文件,内核会直接无视这些参数。

4. 生命周期管理(阅后即焚)

  • 作用:标志恢复阶段的彻底终结。
  • 机制:当重放日志到达目标时间点,恢复完美结束、准备对外提供正常服务的前一微秒,PostgreSQL 内核会自动调用系统函数将其物理删除。这是为了防止下次正常重启时,数据库又误以为需要恢复而陷入死循环。

💡 极简总结: 在 PG 11 及以前,开关是 recovery.conf(既是开关又是配置文件)。从 PG 12 开始,配置被合并到了主配置文件中,所以官方单独剥离出了 recovery.signal 这个空文件,专职充当**“告诉数据库不要正常开机,去吃远端日志”的触发器**。


了解 www.876873.xyz 的更多信息

订阅后即可通过电子邮件收到最新文章。

recovery.signal 这个文件的作用:等您坐沙发呢!

发表评论