PostgreSQL参数archive_command

archive_command 是用来配置 PostgreSQL 归档 WAL 日志的命令,即通过该参数配置一个本地的 shell 命令来归档一个已完成的 WAL 文件。该参数默认值为空字符串'',表示不进行归档。此外该参数是否起作用还取决于另外一个参数 archive_mode,必须为 on 或者 always 才能生效。

归档命令中可以包含一些有特殊意义的字符,如下:

  • %p 表示待归档的 WAL 文件的路径,是相对于数据库的工作目录,即相对于 $DATA 目录的相对路径
  • %f 表示待归档的 WAL 文件的名称
  • 如果命令中包含 % 符号,则需要用 %% 进行转义
  1. 归档命令可自定义配置,如果归档命令执行成功,需要返回一个退出码为 0 的状态,非 0 表示失败。
  2. 这个参数只能在 postgresql.conf 配置文件中进行配置,或者作为 server 的命令行参数在启动时设置。
  3. 如果参数 archive_mode 没有启用,那么 archive_command 参数将被忽略,也就是说 archive_command 参数依赖于 archive_mode。
  4. archive_command 默认值为空,如果为空并且 archive_mode 打开时,WAL 归档功能将被临时禁用,数据库将会积累 WAL 文件。如果提供一个命令,该命令什么也不做,仅仅返回 true(/bin/true),实际上就是关闭了归档功能。

内核实现上:

  1. 归档功能是通过一个独立的进程实现的,该进程只有在 archive_mode 参数打开(always或者on)时才会创建,进程主函数为 PgArchiverMain()。
  2. 归档进程通过一个循环,每 60 秒唤醒一次,判断是否需要进行归档操作,调用 system 执行归档命令,对归档命令执行的退出码进行判断,返回 0 表示归档成功,非 0 表示归档失败。
  3. pg_wal/archive_status 目录存储了 WAL 文件是否已归档的信息,如果 WAL 已准备就绪,随时可以进行归档,则创建一个文件如 000000010000000000000001.ready,表示该 WAL 可以进行归档。当归档成功后,该文件则变成 000000010000000000000001.done,表示已完成归档操作。
  4. 信号 SIGUSR1 唤醒归档进程,立即进行归档。SIGUSR2 唤醒进程进行一次归档,然后进程退出。

文章评论

0条评论