PostgreSQL归档配置及自动清理归档日志的操作
在一般的生产环境中,数据库都需要开启归档模式,那么在pg中如何开启归档模式呢?
pg中的归档配置涉及几个参数如下:
#-Archiving- 是否开启归档 #archive_mode=off#enablesarchiving;off,on,oralways #(changerequiresrestart) 归档命令,注意%p%f%%格式化的含义。 %p是被归档的redo文件的路径, %f是被归档的redo文档的文件名 %%是百分号 #archive_command=''#commandtousetoarchivealogfilesegment #placeholders:%p=pathoffiletoarchive #%f=filenameonly #e.g.'test!-f/mnt/server/archivedir/%f&&cp%p/mnt/server/archivedir/%f' 超时强制归档,例:如果10分钟数据库都没有什么活动,一个redo文件没有写完,就不会归档, 但是我们希望数据库至少10分钟要切换一个日志,则可以使用archive_timeout #archive_timeout=0#forcealogfilesegmentswitchafterthis #numberofseconds;0disables
–归档配置方法为:
1、创建归档目录
pg12@oracle->mkdir-p$PGDATA/archive/
2、编辑归档脚本
该脚本还可以删除7天内的归档日志。
pg12@oracle->vi$PGDATA/arch.sh test!-f$PGDATA/arch/$1&&cp--preserve=timestamps$2$PGDATA/arch/$1;find/arch/-typef-mtime+7-execrm-f{}\;
3、配置归档相关参数
wal_level=replica archive_mode=on archive_command='arch.sh%f%p'
配置完之后重启数据库服务即可。
pg12@oracle->ps-ef|greparchiver pg122133821331020:20?00:00:00postgres:archiver
补充:postgresql归档失败并在日志文件中存在报错
PG运行过程中出现归档失败的情况,并在日志文件中存在报错。
报错如下:
cp:writing`/arch/20171204/000000010000000000000002':Nospaceleftondevice LOG:archivecommandfailedwithexitcode1 DETAIL:Thefailedarchivecommandwas:DATE=`date+%Y%m%d`;DIR="/arch/$DATE";(test-d$DIR||mkdir-p$DIR)&&cppg_xlog/000000010000000000000002$DIR/000000010000000000000002 cp:writing`/arch/20171204/000000010000000000000002':Nospaceleftondevice LOG:archivecommandfailedwithexitcode1 DETAIL:Thefailedarchivecommandwas:DATE=`date+%Y%m%d`;DIR="/arch/$DATE";(test-d$DIR||mkdir-p$DIR)&&cppg_xlog/000000010000000000000002$DIR/000000010000000000000002 cp:writing`/arch/20171204/000000010000000000000002':Nospaceleftondevice LOG:archivecommandfailedwithexitcode1 DETAIL:Thefailedarchivecommandwas:DATE=`date+%Y%m%d`;DIR="/arch/$DATE";(test-d$DIR||mkdir-p$DIR)&&cppg_xlog/000000010000000000000002$DIR/000000010000000000000002 WARNING:archivingtransactionlogfile"000000010000000000000002"failedtoomanytimes,willtryagainlater
原因是归档日志所在文件系统/arch空间不足。
通过清理该文件系统下过期的临时文件,或将归档日志存放至更大的系统空间中。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。