PostgreSQL:关于 archive_command 归档命令

archive_command是用来设置归档行为的命令,重要的库在存储空间允许的情况下会一直开启归档,而有些相对不是很重要的库可能偶尔开启归档,对于第二种情况,应该如何编写 archive_command 命令呢?这里提供两种方式

方法一: 编写 archive_command

这种方法编写两条 archive_command 命令,不归档时启用 /bin/date,真正需要归档时启用下面这条,如下:

1.1 归档参数

1
2
3
4
5
6
# - Archiving -

archive_mode = on # allows archiving to be done
# (change requires restart)
archive_command = '/bin/date' # (change requires restart)
#archive_command='cp %p /archive/pg93/%f'

备注:这种归档的禁用或启用需要通过修改 postgresql.conf 文件来控制,并且修改之后还需要 reload 操作,步骤较烦琐。

方法二: 使用逻辑或运算

看下面这个配置:

2.1 归档参数

1
2
3
4
5
# - Archiving -

archive_mode = on # allows archiving to be done
# (change requires restart)
archive_command = 'test ! -f /archive/pg93/archive_active || cp %p /archive/pg93/%f'

备注:这里使用了逻辑或运算,当文件标识 /archive/pg93/archive_active 存在时,则会运行之后的归档命令。逻辑或命令参考 2.3 的规则。

2.2 查看归档目录

1
2
3
4
5
6
7
[pg93@redhatB pg93]$ ll /archive/pg93
total 64M
-rw-------. 1 pg93 pg93 16M Sep 16 15:29 000000010000000100000077
-rw-------. 1 pg93 pg93 16M Sep 16 15:30 000000010000000100000078
-rw-------. 1 pg93 pg93 16M Sep 16 15:40 00000001000000010000007A
-rw-------. 1 pg93 pg93 16M Sep 16 15:49 00000001000000010000007C
-rw-rw-r--. 1 pg93 pg93 0 Sep 16 15:49 archive_active -- 归档标识文件

备注:归档标识文件archive_active 需要手工创建。

2.3 逻辑或,逻辑与运算

  • 命令1 && 命令2 命令1执行成功后才会执行命令2
  • 命令1 || 命令2 命令1执行失败后才会执行命令2

备注:逻辑运算较第一种方法更为简洁,启用归档时只需 touch 一个标识文件,关闭归档时只需要删除标识文件即可,个人推荐这种方法。如果觉得逻辑运算比较难懂,也可以直接通过 shell 判断语句执行,简单粗暴:

2.4 归档参数

1
2
3
4
5
# - Archiving -

archive_mode = on # allows archiving to be done
# (change requires restart)
archive_command = 'if [ -f "/archive/pg93/archive_active" ]; then cp %p /archive/pg93/%f; fi'

备注:这种方法脚本量稍多点。

2.5 每天生成一个归档目录

archive_command =  'DIR=/pgarch/arch/`date +%F`; sudo test ! -d $DIR && sudo mkdir $DIR; sudo test ! -f $DIR/%f && sudo cp %p $DIR/%f'

参考

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%