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