PostgreSQL数据库清理归档日志

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

PostgreSQL数据库清理归档日志

1 业务背景

安装器部署苍穹后,PostgreSQL数据库(以下简称PG数据库)默认打开归档日志。随着时间的积累,业务的增加,归档日志会占用大量磁盘空间,如果没有及时监控,则容易磁盘撑满,导致数据库服务不可用。


2 解决方案

  1. 如不需要归档,可以设置$PGDATA/postgresql.conf参数文件archive_mode = off ,关闭归档功能。

  2. 用pgbackrest工具进行物理备份,通过repo1-retention-full备份参数进行归档日志的清理。

  3. 结合归档参数和脚本清理归档日志。

  4. 使用定时任务清理归档日志。


方案2可以参考社区PG数据库物理备份文章:PostgreSQL高可用pgbackrest物理备份

                                                                   PostgreSQL备份与恢复中pgbackrest物理备份部分

本文主要讲解方案3和4。

注:以下步骤均在数据节点执行。保留的天数(reserveDay)根据项目上实际需要进行调整。


3 结合归档参数和脚本清理归档日志

3.1 编辑归档脚本

su - postgres
#脚本放置在和postgresql.conf同一层目录下
cat > $PGDATA/pg_archive_clean.sh << EOF
source /home/postgres/.bashrc
#archivelog的上一层目录
PG_ARCH=/kingdee/cosmic/postgres
#保留天数7天(根据项目实际情况修改)
reserveDay=7
test ! -f \$PG_ARCH/archivelog/\$1 && /bin/cp --preserve=timestamps \$2 \$PG_ARCH/archivelog/\$1 && find \$PG_ARCH/archivelog/* -type f -mtime +\$reserveDay -exec rm -f {} \;
EOF

3.2 配置归档相关参数

vim $PGDATA/postgresql.conf
...
#开启归档
archive_mode = on
#引用3.1的归档脚本
archive_command = 'sh pg_archive_clean.sh %f %p'
archive_timeout = 3600
...

3.3 配置参数生效

pg_ctl reload
#查看修改后的结果
psql  -c "select name,setting from pg_settings where name='archive_command';"


4 使用定时任务清理归档日志

cat > /kingdee/cosmic/postgres/pg_data/pg_archive_clear.sh << EOF
source /home/postgres/.bashrc
#archivelog的上一层目录
PG_ARCH=/kingdee/cosmic/postgres
#保留天数7天(根据项目实际情况修改)
reserveDay=7
find \$PG_ARCH/archivelog/* -type f -mtime +\$reserveDay -exec rm -f {} \;
EOF

#每天凌晨3点执行归档清理操作
echo "0 3 * * *  sh /kingdee/cosmic/postgres/pg_data/pg_archive_clear.sh"  >> /var/spool/cron/postgres
#脚本赋权
chown postgres.postgres /kingdee/cosmic/postgres/pg_data/pg_archive_clear.sh


5 两方案比较

方案3结合数据库归档参数,需要修改数据库参数配置文件(postgresql.conf)中归档部分,保留的天数(reserveDay)是以最近一次检查点执行时间往前推天数。

方案4无须修改数据库归档参数,保留的天数(reserveDay)是以定时任务脚本执行时间往前推的天数,即自然天数。

PostgreSQL数据库清理归档日志

1 业务背景安装器部署苍穹后,PostgreSQL数据库(以下简称PG数据库)默认打开归档日志。随着时间的积累,业务的增加,归档日志会占用大量...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息