PITR 真的能恢复到任意时间点吗?
国庆节前一个生产环境的备机 A2 在进行 pg_basebackup 时未加 --write-recovery-conf 且未创建 recovery.conf 文件后,手动将实例进行了启动(该环境本身由 patroni 控制 HA,但 patroni 一直未能将环境恢复,因此 DBA 进行了手动操作),导致 A2 和它原来的主 A1 以同样的 timeline 对外提供服务。这种情况下,我们还能将 A1 和 A2 恢复成主备关系吗? 首先由于 A1 和 A2 处于同一个 timeline,pg_rewind 会直接退出。一个同事提出:postgres 不是有 PITR 特性吗,能不能用 PITR 把 A2 恢复到上一个 timeline,然后再用 pg_rewind 将 A1 和 A2 恢复为主备关系? PITR 原理 PITR(Point-in-Time Recovery)是 PostgreSQL 数据库的一项重要功能,它允许你在数据库发生故障或数据丢失时恢复到特定的时间点。PITR 的工作原理是通过使用 WAL 日志来记录数据库的所有变更操作,从而实现对数据库状态的恢复。PITR 的第一步是创建数据库的基本备份,通常使用 PostgreSQL 的 pg_basebackup 工具来完成。这个基本备份是数据库的初始状态,用于在恢复过程中提供一个起点。 图片来源: http://www.interdb.jp/pg/pgsql10.html 如上图所示,PITR 需要以基本备份记录的 REDO point 为起点,回放之后的 WAL 日志。...