专注,勤学,慎思。戒骄戒躁,谦虚谨慎

just do it

导航

PostgreSQL pg_wal目录下都哪些类型的文件(译)

笔者最近写了一个PostgreSQL自动故障转移脚本,在测试的过程中,发现pg_wal目录中除了常规的wal日志文件,还会生成其他类型的文件,参考如下截图,除了wal日志,其他的这些文件代表什么意思,用什么用途?如下译文中将会给出一个完成的答案。
pg_wal目录

archive_status目录:

原文地址:What Are the Different Types of Files Stored in PostgreSQL’s pg_wal Directory? | by Sheikh Wasiu Al Hasib | Medium

 

 

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.ready000000010000000000000066.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.signalstandby.signal

用途:
— 
recovery.signal:表示数据库应以恢复模式启动。此文件通常在进行时间点恢复(PITR)时创建。
— 
standby.signal:表示数据库应以备用模式启动,通常用于复制设置以保持服务器作为热备用。

示例文件:recovery.signalstandby.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环境,特别是在涉及复制、备份和恢复的场景中。

posted on 2024-11-16 09:02  MSSQL123  阅读(95)  评论(0编辑  收藏  举报