我正在尝试为 PostgreSQL 9.5 主服务器创建一个热备份副本。
我使用的基本过程是在 master 上启动备份:
SELECT pg_start_backup('label', true)
然后在从属服务器上运行 pg_basebackup:
pg_basebackup -h <master ip> -D /data/pgsql/9.5/data -U replicator -v -P --xlog-method=stream
完成后,我执行命令以停止主服务器上的备份:
SELECT pg_stop_backup()
此时,我在 STDOUT 上得到以下信息:
NOTICE: pg_stop_backup cleanup done, waiting for required WAL segments to be archived
WARNING: pg_stop_backup still waiting for all required WAL segments to be archived (60 seconds elapsed)
HINT: Check that your archive_command is executing properly. pg_stop_backup can be canceled safely, but the database backup will not be usable without all the WAL segments.
这将继续并且不会退出。
主服务器上的归档命令设置为:
rsync -a %p <replica ip>:/data/wal-archive/%f
最初,这不起作用,因为需要接受服务器密钥。一旦我手动执行此操作,rsync 就会启动,我可以在 /data/wal-archive 中看到大量文件(目前约为 15GB)。
这是一个 20TB 的数据库,所以我真的不想通过搞砸一些东西来重新开始这个过程。
退出发出警告的终端是否安全?我在其他帖子中读到,archive_mode 只需要在将 DB 流式传输到副本的过程中打开,以设置副本,除此之外,它不是必需的。
在这种情况下,我可以在终端上执行 CTRL-C 并继续配置副本吗?
然后我可以在 master 上关闭 archive_mode 吗?
是的,在 pg_stop_backup() 中使用 CTRL-C 是安全的。
/data/wal_archive 目录中的文件构建来自 master 上的 archive_command。
一旦在从属服务器上启动了 postgres 服务,这些“日志”就会被消耗(即写入从属服务器上的数据库),然后被删除。