笔者最近写了一个PostgreSQL自动故障转移脚本,在测试的过程中,发现pg_wal目录中除了常规的wal日志文件,还会生成其他类型的文件,参考如下截图,除了wal日志,其他的这些文件代表什么意思,用什么用途?如下译文中将会给出一个完成的答案。
pg_wal目录
PostgreSQL pg_wal目录下都哪些类型的文件
在PostgreSQL中,pg_wal
目录(在PostgreSQL 10之前的版本中称为pg_xlog
)对于数据库的预写日志(Write-Ahead Logging,简称WAL)系统至关重要。该目录存储各种文件,以确保数据库的持久性、一致性和恢复能力。以下是pg_wal
目录内文件的类型及其用途的概述:1. WAL Segment Files
命名约定:WAL(预写日志)段文件遵循特定的命名约定,例如000000010000000000000066
。这个名称由时间线ID、日志文件ID和段ID组成,全部采用十六进制格式。
用途:
— 这些文件存储实际的WAL记录,这些记录会记录对数据库所做的每一项更改。WAL段文件对于确保在崩溃恢复、时间点恢复(PITR)或在向备用服务器进行复制期间可以重新播放所有事务至关重要。
— 每个WAL段文件默认通常为16MB大小(此大小可以配置)。
000000010000000000000066
2. Partial WAL Files (`.partial`)
命名约定:这些文件的命名方式与WAL(预写日志)段文件相似,但带有.partial
扩展名,例如000000010000000000000066.partial
。
用途:
— 当一个WAL段没有完全写入时(通常是由于意外关闭或崩溃导致),会创建一个.partial
文件。这个文件表明WAL段是不完整的。
— 在恢复过程中,PostgreSQL会尝试尽可能地完成这些文件,或者如果认为它们无法恢复,则可能会丢弃它们。
000000010000000000000066.partial
3. Timeline History Files (`.history`)
命名约定:时间线历史文件的命名格式为0000000B.history
,其中数字对应于时间线ID。
用途:
— 这些文件用于跟踪时间线变更的历史。时间线变更会在某些情况下发生,例如当备用服务器被提升为主服务器时,或者在时间点恢复(PITR)过程中达到特定的恢复目标时。
— .history
文件记录了时间线发生分歧的日志序列号(LSN),并提供了导致新时间线创建的事件序列的记录。
示例文件:0000000B.history
译者注:一个History文件示例内容如下:
4. Status Files Inside `archive_status` Directory
位置:这些文件位于pg_wal
内的archive_status
子目录中。
文件类型:
.ready
文件:
命名约定:这些文件的命名方式与WAL段文件相似,但带有.ready
扩展名,例如000000010000000000000066.ready
。
用途:.ready
文件表示相应的WAL段文件已准备好进行归档。PostgreSQL将尝试通过执行archive_command
来归档WAL段。
.done
文件:
命名约定:这些文件的命名方式与WAL段文件相似,但带有.done
扩展名,例如000000010000000000000066.done
。
用途:.done
文件表示相应的WAL段已成功归档,PostgreSQL可以安全地回收或删除WAL文件。
000000010000000000000066.ready
,000000010000000000000066.done
5. Temporary Files (`.tmp`)
命名约定:pg_wal
目录中的临时文件可能具有各种扩展名,例如.tmp
。
用途:
— 这些文件是在写入、归档或传输WAL段的过程中创建的。它们代表中间状态,并且通常在操作完成后被重命名或删除。
— 例如,当WAL段正在被复制到归档位置时,可能会使用临时文件。
- 示例文件:
000000010000000000000066.tmp
6. Backup Label Files (`backup_label` and `backup_label.old`)
命名约定:该文件被命名为backup_label
,其旧版本可能会被保留为backup_label.old
。
用途:
— 当使用pg_basebackup
等工具进行基础备份时,会创建backup_label
文件。它包含有关备份的信息,包括备份的起始日志序列号(LSN)和时间线。
— 在恢复过程中,此文件对于确定WAL重播的起始点至关重要。
示例文件:backup_label
译者注:PostgreSQL新版本中为该类文件后缀为backup,比如000000070000000000000013.00000028.backup,其内容如下:
7. End-of-Recovery Markers (`recovery.signal`, `standby.signal`)
命名约定:这些文件被命名为recovery.signal
和standby.signal
。
用途:
— recovery.signal
:表示数据库应以恢复模式启动。此文件通常在进行时间点恢复(PITR)时创建。
— standby.signal
:表示数据库应以备用模式启动,通常用于复制设置以保持服务器作为热备用。
recovery.signal
,standby.signal
译者注:原文提到了recovery.signal,standby.signal,这两(类)文件应该是在PostgreSQL实例的数据文件目录下的,不应该在WAL日志目录
Summary of Use Cases
WAL Segment Files: 存储对数据库恢复、复制和时间点恢复至关重要的WAL记录。
Partial Files: 表示不完整的WAL段,通常在崩溃期间创建。
History Files: 跟踪时间线变更,对于理解和管理跨不同时间线的恢复至关重要。
Status Files (`archive_status`): 管理WAL段的归档过程,指示它们是否已准备好归档或已完成归档。
Temporary Files: 在WAL处理阶段中使用,通常是暂时的,并在操作完成后被删除。
Backup Label Files: 在从基础备份恢复期间,对于确定WAL重播的起点至关重要。
End-of-Recovery Markers: 控制PostgreSQL实例的启动模式,确定它是否应以恢复模式或备用模式启动。
Conclusion
pg_wal
目录是PostgreSQL WAL系统的重要组成部分,它包含了多种文件,这些文件在确保数据库的持久性、一致性和可恢复性方面发挥着不同的作用。了解每种文件类型的用途有助于数据库管理员更有效地管理PostgreSQL环境,特别是在涉及复制、备份和恢复的场景中。
标签:Files,文件,WAL,PostgreSQL,wal,pg
From: https://www.cnblogs.com/wy123/p/18547548