PostgreSQL的归档说明

#参考:

1. 【PostgreSQL的xlog/Wal归档及日志清理】_postgresql清理找不到的日志-CSDN博客

2.    https://zhuanlan.zhihu.com/p/405687213

3.   清理postgresql归档日志并统计_pg删除归档-CSDN博客

基础说明

    归档路径下有archive_status目录,会有类似000000010000000000000002.ready和000000010000000000000003.done的文件。

    ".ready"表示XLOG文件已写满,可以调用归档命令了,".done"表示已归档完成。开启了归档后,只有归档成功的pg_xlog文件才会被清除。

wal命名格式文件名称为16进制24个字符组成,每8个字符一组,每组的意义如下:

00000001 00000000 00000001

--------   --------    --------

时间线    逻辑id   物理id

#查看进度

#select pg_walfile_name(pg_current_wal_lsn());

指令说明

    通常地说,WAL 最大个数不超过:

    ( 2 + checkpoint_completion_target ) * checkpoint_segments + 1

    在流复制环境下, WAL 最大数不超过:

    wal_keep_segments + checkpoint_segments + 1

     如果一个旧段文件不再需要了会重命名然后继续覆盖使用,如果由于短期的日志输出高峰导致了超过

       3 * checkpoint_segments + 1个文件,直接删除文件。

#查找能清理的xlog的范围

# pg_controldata $PGDATA

  

 根据红框所示的文件,表示该编号之前的文件可以清除

#清除指令

# pg_archivecleanup -d $PGDATA/pg_wal 000000010000000000000009

# 查看归档配置是否生效

# select * from pg_setting where name in (‘wal_level’,’archive_mode’,archive_command’);

定期清理归档文件的操作说明(示例)

archive_clean.sh

#!/bin/bash

#删除1天前的文件

find /data/pgdata/pg_archive -type f -mtime +1 -delete

# 删除60分钟前的文件

# find /data/pgdata/pg_archive -type f -mmin +60 -delete

#展示操作时间

echo -e $(date "+%Y-%m-%d %H:%M:%S") deleting arch log >> /data/pgdata/arch.log

echo_log.sh

#! /bin/bash

# 删除一天前的日志,1小时执行一次,统计清理的数据量

ARC_PATH=/mnt/data/pg_archive/

LOG_PATH=/mnt/data/clean_log/

BEFORE=$(du -m $ARC_PATH |tr -cd "[0-9]")

"$LOG_PATH"archive_clean.sh &

ARC_SIGN=$(jobs | grep 'archive_clean.sh')

while [[ "$ARC_SIGN" =~ Running ]]

do

        sleep 1

        ARC_SIGN=$(jobs | grep 'archive_clean.sh')

done

AFTER=$(du -m $ARC_PATH |tr -cd "[0-9]")

CLEAN=$(($BEFORE-$AFTER))

DATE_SIGN=$(date "+%e")

BS_SIGN=$(($DATE_SIGN%2))

if [[ $BS_SIGN == 1 ]];then

        if [[ $CLEAN -lt 10000 ]];then

                echo -e $(date "+%Y-%m-\e[1;44m%d\e[0m %H:%M:%S")--清理: "\e[1;42m$CLEAN\e[0m\t" M>> "$LOG_PATH"clean.log

        else

                echo -e $(date "+%Y-%m-\e[1;44m%d\e[0m %H:%M:%S")--清理: "\e[1;41m$CLEAN\e[0m\t" M>> "$LOG_PATH"clean.log

        fi

else

        if [[ $CLEAN -lt 10000 ]];then

                echo -e $(date "+%Y-%m-\e[1;46m%d\e[0m %H:%M:%S")--清理: "\e[1;42m$CLEAN\e[0m\t" M>> "$LOG_PATH"clean.log

        else

                echo -e $(date "+%Y-%m-\e[1;46m%d\e[0m %H:%M:%S")--清理: "\e[1;41m$CLEAN\e[0m\t" M>> "$LOG_PATH"clean.log

        fi

fi

sleep 30

"$LOG_PATH"log_clean.sh &

cleanlog.sh

#!/bin/bash

cd /mnt/data/clean_log/

tail -72 clean.log > new.log

mv -f new.log clean.log

加入crontab

####  查看当前的定时任务

# crontab -l

#### 编辑定时任务

#crontab -e

#### 例如,定于每天凌晨1点执行,则添加如下指令

00 01 * * * cleanlog.sh

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值