cheatsheet for pg and mysql
mysql/pg中的复制逻辑
在了解 mysql 和 pg 在进行主从复制逻辑之前,我们必须要知道他们在架构上的重大区别。
宏观上来讲,mysql
的架构(和主从复制逻辑相关的)会分为两个层级,分别是 server
和 存储引擎,它的实际架构如下图所示:
flowchart TD
subgraph server["MySQL Server (Server层)"]
direction TB
Connectors("连接器 (Connectors)")
Parser("解析器 (Parser)")
Optimizer("优化器 (Optimizer)")
Executor("执行器 (Executor)")
end
subgraph storage_engine["存储引擎层 (特指 InnoDB)"]
direction TB
BufferPool("缓冲池 (Buffer Pool)")
UndoLog("回滚日志 (Undo Log)")
RedoLog("重做日志 (Redo Log - 真正的单机WAL)")
BufferPool --> UndoLog
BufferPool --> RedoLog
end
subgraph logs["物理日志文件 (磁盘/操作系统)"]
binlog_file[("binlog 文件<br>(逻辑归档/主从复制)")]
redolog_file[("ib_logfile 文件<br>(物理WAL/单机崩溃恢复)")]
end
%% 1. 业务交互线
server -->|Handler API| storage_engine
%% 2. 两阶段提交的物理交互
Executor -->|写 Server 层日志| binlog_file
RedoLog -->|写 2PC 状态: Prepare/Commit| redolog_file
class InnoDB,BufferPool,UndoLog,RedoLog green;
class binlog_file,redolog_file purple;
class InnoDB green
class MyISAM,BLACKHOLE error
class logs light_green
class Connectors,QueryCache,Parser,Optimizer,Executor blue
class server,storage_engine blockContainer
classDef green fill:#695,color:#fff,font-weight:bold;
classDef yellow fill:#FFEB3B,stroke:#333,color:#000,font-weight:bold;
classDef blockContainer fill:#fff3e0,stroke:#ef6c00,stroke-dasharray: 5 5;
classDef transparent fill:none,stroke:none,color:inherit;
classDef content fill:#fff,stroke:#ccc;
classDef animate stroke:#666,stroke-dasharray: 8 4,stroke-dashoffset: 900,animation: dash 20s linear infinite;
classDef blue fill:#489,stroke:#333,color:#fff,font-weight:bold;
classDef pink fill:#FFCCCC,stroke:#333,color:#333,font-weight:bold;
classDef light_green fill:#e8f5e9,stroke:#695;
classDef purple fill:#968,stroke:#333,color:#fff,font-weight:bold;
classDef gray fill:#ccc,stroke:#333,font-weight:bold;
classDef error fill:#bbf,stroke:#f65,stroke-width:2px,color:#fff,stroke-dasharray: 5 5;
classDef coral fill:#f8f,stroke:#333,stroke-width:4px;
classDef orange fill:#fff3e0,stroke:#ef6c00,color:#ef6c00,font-weight:bold;
而 pg 则简单很多:它只有一个存储引擎: