暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

PostgreSQL运维—归档配置

原创 李先生 2022-02-16
3295

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<replica<logical)

  • 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
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论