什么是PostgreSQL日志归档
文章目录
前言
PostgreSQL默认采用的是非归档模式,也就是说,在重做日志被写满时,数据库会覆盖之前的重做日志信息,这就会导致重做日志丢失。
为了保证重做日志不会丢失,建议在生产环境开启 PostgreSQL 的归档模式。以保证能完全恢复数据库中的数据。
一、设置 PostgreSQL 的归档模式
1.1 查看当前的归档模式
postgres=# show archive_mode;
archive_mode
--------------
off
(1 row)
通过上面的命令可以看到,默认处于非归档模式
1.2 查看当前 PostgreSQL 的数据目录
postgres=# show data_directory;
data_directory
----------------
/dbs/pg14/data
(1 row)
1.3 创建日志归档目录
[postgres@localhost ~]$ mkdir -p /home/postgres/training/pgsql/data
1.4 修改配置文件
$PGDATA/postgresql.conf
cat >> test << EOF
archive_mode = on
archive_command = 'DATE=`date +%Y%m%d`; DIR="/home/postgres/training/pgsql/data/archivelog/$DATE";(test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'
EOF
1.5 重启 PG 服务检查归档信息
postgres=# show archive_mode;
archive_mode
--------------
on
(1 row)
归档已开启
1.6 查看预写日志列表
postgres=# select * from pg_ls_waldir() order by modification desc;
name | size | modification
--------------------------+----------+------------------------
000000010000000000000008 | 16777216 | 2024-12-03 02:11:13+00
00000001000000000000000C | 16777216 | 2024-11-29 04:39:02+00
00000001000000000000000B | 16777216 | 2024-11-28 08:56:50+00
00000001000000000000000A | 16777216 | 2024-11-28 08:55:04+00
000000010000000000000009 | 16777216 | 2024-11-28 08:31:36+00
(5 rows)
二、管理过期的归档日志文件
启动 PostgreSQL 的日志归档后,会生成大量的归档日志文件。如果没有及时删除,会导致磁盘空间被占满。
2.1 创建shell脚本
PostgreSQL 执行日志文件时会自动调用参数 archive_command 所指定的命令,因此可以在参数 archive_command中传入指定脚本。在生成归档日志前删除过期的归档日志。
创建 Shell 脚本
test -! -f /home/postgres/training/psql/data/archivelog/$1 && cp --preserve=timestamps $2 /home/postgres/training/pgsql/data/archivelog/$1 ; find /data/postgres/archivelog/ -type f -mtime +7 -exec rm -f {} /;
2.2 给脚本添加执行权限
[postgres@localhost ~]$ chmod +x /home/postgres/training/pgsql/data/arch.sh
修改 postgresql.conf 文件archive_command 的参数
archive_command = '/home/postgres/training/pgsql/data/arch.sh %f %p'
2.3 重启服务
标签:PostgreSQL,postgres,归档,日志,data,archive From: https://blog.csdn.net/weixin_46661978/article/details/144203985重启服务以后,此时的归档日志文件,当时间超过7天,再次生产归档日志文件时会自动删除该归档的日志文件。