首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL-主从复制(Replication)原理

PostgreSQL-主从复制(Replication)原理

作者头像
运维小路
发布2026-01-26 12:30:52
发布2026-01-26 12:30:52
1150
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL

PostgreSQL(本章节)

MongoDB

Redis

Etcd

我们前面介绍了MySQL的主从原理及相关部署配置,今天我们来介绍PostgreSQL的主从原理,他们在一定程度上比较相似。

我们前面在介绍PostgreSQL的存储引擎的时候,介绍过PG写数据的时候会会先写到WAL (Write-Ahead Logging)事务日志,然后再落盘到数据库里面。其实PG的主从也是基于WAL事务日志的,以下是其详细介绍:

一、复制类型

PostgreSQL 支持多种复制方式,核心区别在于同步方式和数据延迟:

  1. 物理复制(Physical Replication)基于 WAL 日志的物理块复制,从库直接重演主库的 WAL 日志,与主库数据完全一致(字节级复制)。
  • 优势:兼容性强(支持所有数据类型和操作)、性能高。
  • 缺点:从库无法独立修改配置或表结构(只读)。
  1. 逻辑复制(Logical Replication)基于逻辑日志(解析 WAL 为 SQL 操作),支持选择性复制(指定表或数据库),从库可读写。
  • 优势:灵活(跨版本、跨库复制)、支持部分数据同步。
  • 缺点:性能略低(需解析 WAL)、不支持所有数据类型(如大对象)。

二、物理复制(最常用)的工作流程

1. 主库(Master)的操作

  • 事务执行:主库接收客户端写操作,执行事务时先将修改记录写入WAL 缓冲区。
  • WAL 刷盘:WAL 缓冲区定期(或事务提交时)刷到磁盘的 WAL 文件(默认存储在pg_wal目录),确保事务持久性。
  • 日志发送:主库启动wal_sender进程,监听从库的连接请求,将新生成的 WAL 日志发送给从库。

2. 从库(Slave)的操作

  • 启动复制:从库通过recovery.conf(PostgreSQL 12 + 合并到postgresql.conf)配置主库信息(IP、端口、复制用户),启动时进入恢复模式。
  • 日志接收:从库启动wal_receiver进程,连接主库的wal_sender,接收 WAL 日志并写入本地pg_wal目录(或临时文件)。
  • 日志重演:从库的startup进程读取接收的 WAL 日志,按顺序重演事务(即 “恢复”),更新本地数据文件,最终与主库数据一致。

3. 同步与异步机制

  • 异步复制(默认):主库提交事务后立即返回客户端,无需等待从库确认日志接收。
  • 同步复制:主库提交事务后,需等待至少一个从库确认已接收并写入 WAL 日志,才返回客户端。

三、逻辑复制的工作流程

  • 主库配置:创建发布(Publication),指定需要复制的表(如CREATE PUBLICATION pub1 FOR TABLE t1, t2;)。
  • 逻辑解码:主库通过wal2json等插件将 WAL 日志解析为逻辑操作(如INSERT (id=1, name='a'))。
  • 从库配置:创建订阅(Subscription),关联主库的发布(如CREATE SUBSCRIPTION sub1 CONNECTION 'host=master ...' PUBLICATION pub1;)。
  • 数据同步:从库接收逻辑操作,转换为本地 SQL 执行,实现数据复制(从库可独立写入非复制表)。

四、同MySQL主从对比

对比方面

PostgreSQL

MySQL

日志类型

物理日志 - WAL 记录数据页的物理变化

逻辑日志 - binlog 记录行的逻辑变更(SQL语句或行变化)

复制级别

块级别 - 数据页的字节变化

行级别 - 具体哪些行的数据被修改

同步单元

WAL 记录流

binlog 事件

复制过程

WAL Sender → 流式传输 → WAL Receiver → 重放

binlog dump → 传输 → I/O线程写relay log → SQL线程重放

数据一致性

强一致性 - 主从数据块完全一致

最终一致性 - 可能存在微小延迟

性能影响

对主库影响较小(WAL是核心组件)

对主库有一定性能开销(额外的binlog记录)

跨版本兼容

要求主从版本严格一致

支持不同版本间复制(有一定限制)

拓扑灵活性

相对简单,主要是一主多从

支持复杂拓扑(链式、双主、多源复制)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 一、复制类型
    • 二、物理复制(最常用)的工作流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档