-
时间点恢复到了 3点,此时的lsn 换算到 归档wal日志以前的wal日志要删除,那3-4点之间的wal日志在 s3归档服务器里面这么处理??
⛓️ PITR 绝对因果逻辑推演链 [状态 0:刚解压的 5TB 备份] 【因(致命缺陷)】:数据由长时间顺序拷贝而来,物理页块处于撕裂(Torn Page)和时空不一致的模糊状态(Fuzzy)。若直接对外开放,必定发生物理级数据损坏。 【动作】:人为创建空文件 recovery.signal。 【果(状态跃迁)】:内核 Startup 进程 ...
-
restore_command命令相关
🌉 机制一:它到底是个什么东西?(OS 级的系统调用) 新手的误解:很多人以为这是 PG 内部的某种 SQL 函数或者内置协议。 物理真相:它本质上是一个纯粹的 Linux Shell 命令字符串! 内核微操:当 Startup 进程发现自己需要下一个 WAL 日志时,它在 C 源码底层会直接调用操作系统的 system() 函数(或者 ex ...
-
recovery.signal 这个文件的作用
1. 强制状态机切换(身份定义) 作用:当数据库启动(Startup 进程唤醒)时,它会首先检查数据目录($PGDATA)下是否存在这个文件。 机制: 存在:内核立刻意识到“我现在是一个不完整的备份克隆体”,从而进入 Archive Recovery(归档恢复) 状态。 不存在:内核认为这是一次正常的断电重启,进入普通的 Cra ...
-
时间点恢复(PITR)恢复的工作流程 逻辑推演一遍解释清楚前因后果
⛓️ 逻辑环扣一:为什么不能直接开机?(物理封锁) 【前因:薛定谔的 5TB 肉体】 你用 pg_basebackup 拷贝这 5TB 数据花了好几个小时。这意味着,表 A 可能是下午 1 点的,表 B 可能是下午 3 点的。此时此刻,这 5TB 数据在物理上是**“内部撕裂、极度不一致”**的(即 Fuzzy 状态)。如果直接开机让业务连进来写数 ...
-
🟢 第一阶段:握手与特权建立 (进度:0%)
📡 微操一:Startup Packet 中的“特洛伊木马”(客户端突入) 常规的认知:普通业务(比如 Java/Python 程序)连数据库,发的是账号、密码和要连接的数据库名。 底层的异变:当你在终端敲下 pg_basebackup 时,它底层的 libpq 驱动在发起 TCP 三次握手后,向主库发送的第一个数据包叫 StartupPacket(启动报文) ...
-
🔴 第五阶段:防篡改与绝对落地 (备份结束)
🔐 动作一:签发终极密码本(backup_manifest 的诞生) 物理背景:主库的 walsender 进程已经把所有数据块和 backup_label 发完了,并且等到了归档成功的信号。它准备断开网络了。 合规与防篡改逻辑:但在断开前的最后一秒,PG 13+ 的内核会执行一个神圣的动作——它会把这 3 个小时内发送给你的成千上万个文件, ...
-
pg_basebackup()原理, 这个工具的运行机制逻辑推演
🟢 第一阶段:握手与特权建立 (进度:0%) 目标:让主库知道“我不是来查数据的,我是来拷全库的”。 💻 客户端 (pg_basebackup): 发起数据库连接。但在底层连接报文里,悄悄塞入一个特权参数:replication=true。 🖥️ 服务端 (PostgreSQL 主库): 主进程 (Postmaster) 收到连接,看到 replication=tru ...
-
检查点进程 在获得 wal buffer中的 lsn 和 扫描内存中的脏页的过程中,会涉及到哪些锁?? 这些锁 的功能
在获取 wal buffer中lsn的时候,申请什么 锁?? 这个锁加到什么对象上面? 🗡️ 核心真相:获取 LSN 到底申请了什么锁? 当 checkpointer 在 $a$ 时刻去获取起跑线 LSN(也就是 REDO_LSN)时,它申请的根本不是一个 Spinlock(自旋锁),而是一组极其特殊的 LWLock(轻量级锁)! 在 C 源码中,这个动作调用的 ...
-
archiver进程相关
进程的模块内容: 📡 矩阵一:底层通信与触发法则(时空信标) .ready 与 .done 状态机:archiver 不靠猜,它依赖 pg_wal/archive_status 目录下的 0 字节信标文件。.ready 是唤醒它的冲锋号,.done 是它完成使命后的物理墓碑。 双重唤醒防线: 敏锐电击:WAL 文件写满瞬间,内核发射 Latch 信号量直接唤醒 ...
-
检查点进程的完整工作流程
下面把 检查点进程(checkpointer)工作流程 按一条完整逻辑链推一遍。 1. 起点:前台事务先把页改脏,不立刻写数据文件 PostgreSQL 采用 WAL 先行。事务修改数据时,先生成并持久化相应的 WAL,再允许数据页稍后落盘;数据页不会因为一次 UPDATE/INSERT 就立刻写回表文件。官方文档明确说,数据文件的更改 ...