承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601

PostgreSQL pg_archivecleanup与清算archivelog的操作

管理员 2023-07-03 07:55:17 互联网圈 14 ℃ 0 评论 4515字 收藏

pg_archivecleanup 和 pg_rewind 是PG 中两个重要的功能,一个是为了清算过期的 archive log 使用的命令,另外一个是你可以理解为物理级别的 wal log的搬运工。

我们先说第一个 pg_archivecleanup 命令,这个命令主要是用于使用了archive log 功能的 postgresql 但在 archive log 堆积如山的情况下,你怎样来根据某些规则,清算这些日志呢?

这里面就要使用 pg_archivecleanup 这个命令了,可以定时的来运行它,将已移动到archivecleanup 的目录的archivelog 根据要求开始清算。

固然我们先的说说如果不定期清算会出甚么问题

1 如果不定期清算archive 如果寄存archivelog 的位置没法在接受新的日志,则大量WAL日志会滞留在 wal_log 目录中,则整体数据库系统都会遭到影响。

2 占用大量的存储空间,存储无效的数据

那一般来讲如果没有第三方的备份工具的情况下,怎样来通过pg_archivecleanup 来进行archivelog 的清算。

需要关注几个点

1 清算的时,清算的WAL_LOG 会不会已是包括在最后一次的备份中,保证清算的WAL_LOG 也能够从备份文件中恢复数据库

2 清算的时候,对保存在非主库的wal_log 怎样办

一般来讲,设置自动清算archive_log 可以在配置文件中添加

archive_cleanup_command = ‘pg_archivecleanup archivelocation %r’

来操作。

但一般来讲这样做好处少,弊端多,我比较喜欢写相关的脚本,定时去运行的方式,并且可以记录像关的LOG 日志等等。

可以写一个脚本,来辅助定时清算相关的archive_log

固然这样的方法也是有弊真个,如果由于备份的缘由的故障,而直接使用天数来清算会有由于没有备份而直接将 wal_log 给清算掉,所以更加靠谱的方法是通过某些命令来取得需要截止的清算的Wal_log 名称。

例如 备份后的

会在wal_log 里面有backup 的标记,这说明这个WAL log 之前的数据已备份了,如果清算这个WAL LOG 之前的log 是安全的。

000000010000000300000030.00000060.backup

使用下面的脚本可以来更安全的清算

#!/bin/bash
ARCHIVEDIR=’/pgdata/archive’
CHK_SAFE=$(find $ARCHIVEDIR -type f -mtime +3 -name ‘*backup’ -printf ‘%f\n’ | sort -r | head ⑴)
cd $ARCHIVEDIR
/usr/local/postgres/bin/pg_archivecleanup $ARCHIVEDIR $CHK_SAFE
find $ARCHIVEDIR -type f -mtime +3 -a -name ‘*backup’ -a ! -newer $CHKPOINT -delete

补充:postgresql流日志误删处理(xlog)

今天同事误删postgresql库数据文件下的pg_xlog文件夹,致使所有流日志丢失,数据库没法启动,视察正告日志:

2018-03⑴2 18:45:54 CST LOG: database system shutdown was interrupted; last known up at 2018-03⑴2 17:48:27 CST
2018-03⑴2 18:45:54 CST LOG: could not open file “pg_xlog/000000010000001400000060” (log file 20, segment 96): No such file or directory
2018-03⑴2 18:45:54 CST LOG: invalid primary checkpoint record
2018-03⑴2 18:45:54 CST LOG: could not open file “pg_xlog/000000010000001400000060” (log file 20, segment 96): No such file or directory
2018-03⑴2 18:45:54 CST LOG: invalid secondary checkpoint record
2018-03⑴2 18:45:54 CST PANIC: could not locate a valid checkpoint record
2018-03⑴2 18:45:54 CST LOG: startup process (PID 32680) was terminated by signal 6: Aborted
2018-03⑴2 18:45:54 CST LOG: aborting startup due to startup process failure

用postgresql自带的pg_resetxlog工具可以跳过对WAL log的恢复。不过会丢失一些事务。恢复命令也很简单以下:

pg_resetxlog -f /var/lib/pgsql/9.6/data

然后启动postgrsql ,数据库便可正常进入

参考:pg_resetxlog官方文档

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有毛病或未斟酌完全的地方,望不吝赐教。

文章来源:丸子建站

文章标题:PostgreSQL pg_archivecleanup与清算archivelog的操作

https://www.wanzijz.com/view/61152.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信