PostgreSQL的流复制配置完成以后,主备之间会持续不断的进行数据同步而无需人工干预。
然而在某些情况下我们需要先挂起流复制,在将来的某个时间点再恢复它。
比如我们需要将软件从V1.0 升级到V2.0,在升级的过程中数据库也要同步进行更新。任何升级有都是有风险的,如果主节点升级失败,那么升级后的数据也会同步到备节点,这是我们不希望看到的结果。
为了避免这种情况的发生,我们就需要先暂停流复制,等升级成功之后再开启流复制。
大概是如下的三个步骤:
- 挂起复制
在备节点上执行
SELECT pg_wal_replay_pause();
这时WAL日志仍然会传输到备节点,但备节点的relpay进程被挂起。此时备份数据仍然存在,即便主节点崩溃也不会有数据的丢失。
备节点日志中会出现如下的日志信息:
ERROR: recovery is not in progress
HINT: Recovery control functions can only be executed during recovery.
- 对应用实施升级操作
- 如果升级成功,则恢复复制;如果升级失败,则讲主节点切换到备节点,此时备节点上仍然是升级前的数据。
在备节点执行:
SELECT pg_wal_replay_resume();
备节会将来自主节点的WAL日志,在备节点上执行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




