postgresql运维—归档配置
背景
在postgresql中,wal日志记录了数据库重要数据文件的所有变化,你对数据的操作都会被记录到其中,wal日志是保证数据完整性的一种标准方法,wal的中心概念是数据文件(存储着表和索引)的修改必须在这些动作被日志记录之后才被写入,即在描述这些改变的日志记录被刷到持久存储以后。
由于postgresql的正常运行,有着一些参数,控制这wal日志的数量及大小,使其覆盖掉老的历史的wal日志。
所以我们就可以利用postgresql中的归档来对wal日志进行归档备份,以应付数据丢失情况的不时之需。
相关参数
#wal_level = replica # minimal, replica, or logical
# (change requires restart)
#archive_mode = off # enables archiving; off, on, or always
# (change requires restart)
#archive_command = '' # command to use to archive a logfile segment
# placeholders: %p = path of file to archive
# %f = file name only
# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p mnt/server/archivedir/%f'
#archive_cleanup_command = '' # command to execute at every restartpoint
wal_level
wal_level 参数默认值为 replica ,每个层次包括所有更低层次记录的信息。(级别:minimal
- minimal —— 不能通过基础备份和wal日志恢复数据库。
- replica —— 该级别支持wal归档和复制。
- logical —— 在replica级别的基础上添加了支持逻辑解码所需的信息。
archive_mode
- off —— 默认值,不开启归档wal
- on —— 启用归档wal,通过设置 archive_command 命令将完成的wal 段发送到归档目录。
- always —— 从归档中恢复的或者用流复制传来的文件将被(再次)归档
archive_command
调用服务器上本地shell或工具命令,用于归档一个完成的wal文件。该参数仅在启用了archive_mode时生效,否则它将会被忽略。
当 archive_mode 被启用时,archive_command为设置值时,wal 归档的操作会被临时禁用。
%p
:指定的参数字符串值中的任何%p
被替换成要被归档的文件的路径名%f
:指定的参数字符串值中的任何%f
只被文件名替换(路径名是相对于数据目录)
archive_cleanup_command
指定一个shell命令,用于清理不需要的已归档wal文件。通常使用pg_archivecleanup模块清理过时的已归档文件。
archive_cleanup_command = 'pg_archivecleanup /mnt/archivedir %r'
配置示例
对postgresql.conf文件编辑,针对以上参数进行如下设置:
wal_level = replica --启用replica级别 archive_mode = on --启用归档 archive_command = 'dir=/pgsql/data/archive/`date %f`; test ! -d $dir && mkdir $dir; test ! -f $dir/%f && cp %p $dir/%f' --对归档进行按天分类
对于archive_cleanup_command,根据实战经验来看,不建议依赖特性类的清理归档,个人喜欢脚本话,可控。
效果展示
[postgres@lyp ~]$ cd $pgdata [postgres@lyp data]$ ls -lrt pg_wal total 81920 -rw-------. 1 postgres postgres 16777216 jan 9 17:34 000000010000000300000029 -rw-------. 1 postgres postgres 16777216 jan 9 17:35 00000001000000030000002a -rw-------. 1 postgres postgres 16777216 jan 9 18:04 00000001000000030000002b -rw-------. 1 postgres postgres 16777216 jan 9 18:05 00000001000000030000002c drwxrwxr-x. 2 postgres postgres 6 jan 9 18:09 archive_status -rw-------. 1 postgres postgres 16777216 jan 9 18:09 000000010000000300000028 [postgres@lyp data]$ ll archive/ total 4 drwx------. 2 postgres postgres 4096 jan 9 18:05 2022-01-09 [postgres@lyp data]$ ll archive/2022-01-09/ total 212992 -rw-------. 1 postgres postgres 16777216 jan 9 17:06 00000001000000030000001b -rw-------. 1 postgres postgres 16777216 jan 9 17:10 00000001000000030000001c -rw-------. 1 postgres postgres 16777216 jan 9 17:12 00000001000000030000001d -rw-------. 1 postgres postgres 16777216 jan 9 17:24 00000001000000030000001e -rw-------. 1 postgres postgres 16777216 jan 9 17:25 00000001000000030000001f -rw-------. 1 postgres postgres 16777216 jan 9 17:29 000000010000000300000020 -rw-------. 1 postgres postgres 16777216 jan 9 17:29 000000010000000300000021 -rw-------. 1 postgres postgres 16777216 jan 9 17:30 000000010000000300000022 -rw-------. 1 postgres postgres 16777216 jan 9 17:31 000000010000000300000023 -rw-------. 1 postgres postgres 16777216 jan 9 17:34 000000010000000300000024 -rw-------. 1 postgres postgres 16777216 jan 9 17:35 000000010000000300000025 -rw-------. 1 postgres postgres 16777216 jan 9 18:04 000000010000000300000026 -rw-------. 1 postgres p
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。