PostgreSQL教程(8)归档日志配置

PostgreSQL教程(8)归档日志配置

一、PostgreSQL 归档模式

在默认情况下,PostgreSQL采用的是非归档模式,在该模式下WAL日志被写满后会触发轮询,将前面的日志覆盖掉,导致WAL日志丢失。如果数据库实例变更频繁,那么WAL日志很可能在不断轮询,这样容易出现想恢复到某一刻数据的时候因为WAL日志被覆盖了而无法恢复的情况。所以在生产环境中都强烈建议开启归档模式,在归档模式下,PostgreSQL 会先将早期产生的WAL日志按照要求进行备份后再进行覆盖,避免WAL日志丢失。

二、PostgreSQL 日志归档配置

1、查看当前归档模式

#默认为off
postgres=# show archive_mode;
 archive_mode 
--------------
 off
(1 row)

2、开启归档模式

修改 postgres.conf 配置文件,开启归档功能并配置归档命令

vi postgres.conf
# 启用归档模式
archive_moed = on 
   
# 归档命令配置
# %p表示WAL日志的绝对路径,如/data/pgsql/pg_wal/000000010000000000000065
# %f表示WAL日志的文件名,不含路径,如000000010000000000000065
archive_command = 'test ! -f /data/pgarchive/%f && cp %p /data/pg_archive/%f'

3、查看当前WAL日志列表

postgres=# select * from pg_ls_waldir();
           name           |   size   |      modification      
--------------------------+----------+------------------------
 0000000100000000000000B9 | 16777216 | 2025-09-08 22:30:41+08
 0000000100000000000000BA | 16777216 | 2025-09-08 22:30:41+08
 0000000100000000000000BB | 16777216 | 2025-09-08 22:30:41+08
 0000000100000000000000BC | 16777216 | 2025-09-08 22:30:41+08
 0000000100000000000000BD | 16777216 | 2025-09-08 22:30:41+08
 0000000100000000000000BE | 16777216 | 2025-09-08 22:30:42+08
 0000000100000000000000BF | 16777216 | 2025-09-08 22:30:42+08
 0000000100000000000000C0 | 16777216 | 2025-09-08 22:30:42+08

4、查看归档日志占用磁盘情况

select count(*), pg_size_pretty(sum(size)) 
postgres-# from pg_ls_waldir();
 count | pg_size_pretty 
-------+----------------
    64 | 1024 MB

5、手动切换WAL日志触发归档

在 PostgreSQL中,当 WAL 文件被写满或发生WAL切换时,数据库就会去执行 archive_command,把这个完整的 WAL 文件复制到归档目录,所以这里为了模拟效果进行手动的WAL日志切换,生成一个新的 WAL 文件

select pg_switch_wal();

6、查看是否正常归档

ls /data/pg_archive

三、归档日志的清理

由于PostgreSQL内部机制原因,它并不会自动对归档日志进行处理,而是持续存放在归档目录中。如果没有配置一个合理的清理策略,会导致磁盘空间被占满。为了避免上述问题,需要根据备份周期来进行归档日志的清理策略,通常保留两次全量备份之间的所有归档数据,这样可以起到一个增量备份的作用,可以灵活的进行时间点恢复。

在生产环境中,推荐使用 pgBackRest、barman 等工具,它们能在执行全量/增量备份后自动管理归档日志的保留和清理。如果不使用工具,则需要 DBA 定期编写脚本手工清理,确保既能满足恢复需求,又避免磁盘被日志撑满。另外 PostgreSQL 还提供了一个内置工具 pg_archivecleanup 用于清理不再需要的归档日志。

#pg_archivecleanup <归档目录路径> <保留的起始WAL文件>
pg_archivecleanup /data/pgarchive 0000000100000000000000A5


文章评论

猜你喜欢

MySQL教程(11)物理备份工具Xtrabackup使用教程

MySQL MySQL教程(11)物理备份工具Xtrabackup使用教程

一、Xtrabackup 介绍Xtrabackup是Percona出品的一款针对MySQL的物理备份工具。物理备份通常是指直接对数据文件、日志文件、配置文件等对象直接进行复制的一种备份方法。...

MySQL教程(10)逻辑备份工具mysqldump使用教程

MySQL MySQL教程(10)逻辑备份工具mysqldump使用教程

一、MySQL逻辑备份介绍逻辑备份是指通过导出数据库中的逻辑信息(如表结构、视图、索引、存储过程、数据内容等)并保存为可读格式的过程。它将数据库数据以SQL语句或其他标准格式(如CSV、JSON)输出...

PostgreSQL教程(12)基于流复制的主从集群

PostgreSQL PostgreSQL教程(12)基于流复制的主从集群

一、PostgreSQL 流复制概念在PostgreSQL中,通过流复制(Streaming Replication)实现主从架构,保证数据安全性的同时提高读写性能与容灾能力。流复制的实现方...

PostgreSQL教程(11)第三方物理备份工具pg_rman使用教程

PostgreSQL PostgreSQL教程(11)第三方物理备份工具pg_rman使用教程

pg_rman是一款PostgreSQL第三方物理备份工具,支持对整个数据库集群、归档日志和服务器日志进行在线备份。由于pg_rman是基于本地数据拷贝的方式,而不是流式备份,所以要求 pg...

PostgreSQL教程(10)物理备份工具pg_basebackup使用教程

PostgreSQL PostgreSQL教程(10)物理备份工具pg_basebackup使用教程

一、PostgreSQL 物理备份介绍物理备份是通过复制整个数据目录来对数据库实现备份的一种高效手段,备份对象包括所有的数据文件、WAL 日志以及相关的配置文件。在 PostgreSQL 中核心物理备...