千家信息网

PostgreSQL中流复制的原理是什么

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关PostgreSQL中流复制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。和MYSQL 不同,MYSQL的复制
千家信息网最后更新 2026年10月31日PostgreSQL中流复制的原理是什么

今天就跟大家聊聊有关PostgreSQL中流复制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

和MYSQL 不同,MYSQL的复制是基于逻辑复制,而PG 具有流复制和逻辑复制两个功能。提到流复制如果让我理解,想到就是ORACLE Dataguard 这样的功能,当然ORALCE 也有流复制和高级复制等功能,这里就不再提及。

这里复制的技术很多,有shared disk failover , write-Ahead log shipping , logincal replication , 等等今天我们要学习的就是

Write-ahead log shipping ,这个功能。

那使用这个功能对我们有什么好处

1 它是一个内建功能

2 连接的方式是通过 wal ahead log 的方式

3 没有特别的硬件需求

4 对主机的运行基本没有影响

5 可以设置数据的同步和异步

6 Standy 库是可以进行只读的活动

读完上面的点,发现通过流的方式复制其实比逻辑的复制好的地方,就是1 没有事务冲突 2 不会有事务较大,造成延迟的问题 3 数据在切换过程中,不会有数据丢失的担心。

以上都是MYSQL 在复制的过程中,我可能会担心的问题。

流复制是PostgreSQL 在 9.0 推出的功能,其中主要由三个进程

1 walsender

2 walreceiver

3 startup

这三者是怎么工作的我们的画一个图来 分析一下。

1 Standby 库通过 walreciever 来尝试连接到 主库

2 Primary 主库会通过wal sender来进行 tcp -IP 方式的连接,握手确认连接

3 从库的standby 会发送目前他最后的一次的LSN 号码给主库,从库的LSN 号必然必须小于主库(如果是反向的,说明主库的数据落后于从库,或是其他问题,这样的复制是没有办法进行的)

4 主库会提供 WAL Segments 并开始进行复制的数据发送的工作

通过

select application_name,state from pg_stat_replication;以下的语句来查看当前库是否在进行sender 的状态。

说到这里,其实每种数据库的复制都会存在一个问题就是如果STANDBY 库重新启动或者STANDBY 没有跟上 PRIMARY 库的发送日志的速度,则结果就是复制失败。而PostgreSQL有两个方法来尽力拯救这样的事情,

1 提高 wal_keep_segments 这让我想起了 MONGODB 提高OPLOG 的存储大小来让MONGODB 复制不会产生类似的问题。

2 使用replication slot 的方式和功能来灵活的进行WAL 数据的发送。

其实大白话就是 要不我在 发送端做点什么,要不我在接收端做点什么。

同时我们可以通过 sent_lsn, write_lsn,flush_lsn, replay_lsn, 来判断我们的复制的状态如何。

3 PG 的复制中,可以是多从的结构。

说完这些,需要探讨配置流复制中的参数了

首先要打开 POSTGRESQL 的复制

1 wal_level = replica

确定写入WAL 的信息的多少, 如果想调整这个参数,需要在开启服务前就进行设置

如果设置为 minimal level 则类似 create table as create index , copy 等命令的日志就不会被记录

2 synchronous_commit 相关的选项

on , remote_apply , remote_write , local

默认的安全值是ON 同时 如果你选择 remote_apply 或者 remote_write 则会等待standby的主机进行相关的回馈,主库才能继续后面操作。

3 max_wal_sender 设置最大的primary standby的 连接数,默认为10

4 wal_keep_segments 这里指定最大可以保持多少 wal 日志的数量,一个WAL 的日志数量是 16MB 。

5 wal_sender_timeout 默认检测 standby 的没有响应的时间默认是60 秒

6 synchronous_standby_name = 'standby_name one by one'

在PG的设置中有一个功能是可以设置一个备用机,与PG 的主机进行流复制,当备用机停止工作的时候,主机也停止工作。在上面的参数选项中,需要填写具体的那台standby机器需要,与主库中这样的关系。

同时需要在standby库去设置

需要在从库的recovery.conf 中来设置

7 以下的设置时在 standby下进行的

hot_standby = on 允许在recovery 的状态下,进行查询的语句


其他,在配置完相关的参数后,需要使用 pg_basebackup 将主库的数据拉到备库,配置参数后启动备库,则类似 ORACLE dataguard 的PG 流复制就生效了。

看完上述内容,你们对PostgreSQL中流复制的原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

功能 数据 就是 参数 方式 问题 主机 日志 工作 内容 同时 状态 逻辑 配置 中流 原理 最大 两个 事务 数量 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网和科技创新 新华互联网科技学院 互联网核心科技是什么 互联网科技开发公司 科技与互联网发展 沃里互联网科技 互联网科技生活的内容 互联网公司会议桌创意科技软装饰 富国互联网科技创新基金 互联网之后的科技是什么 苏州五指互联网络科技有限 深圳育鹏互联网科技有限公司招聘 深圳艾果互联网通讯科技 互联网科技公司营业执照怎么办理 华中科技大学互联网的牛人 互联网营销推广黑科技 2021世界互联网领先科技成果发布 现代科技的标志之一的互联网 中国主要互联网科技公司 互联网科技企业文化 朗新科技与工业互联网 互联网科技英文 天扬科技互联网广告 宁波青枫互联网科技有限公司 欧洲十大科技互联网公司 荆州市昕露互联网络科技有限公司 互联网科技年终奖 广州燕处互联网科技有限公司 众联互联网络科技 上海互联网科技园景观
0