-
+-----------------+ | Application | | (Client) | +--------+--------+ | | 1. Write Request (INSERT/UPDATE/DELETE) V +-----------------+ | Master DB | | (Primary) | +--------+--------+ | | 2. Data Write (Transaction Commit) | -> Binlog (Binary Log) V +-----------------+ <---> +-----------------+ | Binlog | | Relay Log | | (Binary Log) | <------> | (Replica) | +-----------------+ +-----------------+ | | 3. Async Replication (Slave Pull Binlog) V +-----------------+ | Slave DB | | (Replica) | +--------+--------+ | | 4. Read Request (SELECT) V +-----------------+ | Application | | (Client) | +-----------------+
主库(Master):
- 当主库执行写操作(如
INSERT
、UPDATE
、DELETE
)时,它会将这些操作记录到 二进制日志(Binlog) 中。Binlog 记录了所有更改数据库状态的操作。
- 当主库执行写操作(如
-
从库(Slave):
- 从库不直接从主库推送数据,而是通过 拉取(Pull) 的方式从主库获取二进制日志(Binlog)。
- 从库会通过 IO线程 与主库建立连接,从主库请求并获取主库的 Binlog。
- 这个过程是异步的,即主库并不会等待从库接收或处理完日志才返回操作结果,主库会直接执行写操作并返回。
-
从库应用 Binlog:
- 从库获取到 Binlog 后,将其存储到 Relay Log(中继日志)中。
- 然后,SQL线程 会读取这个 Relay Log,并将其中的 SQL 语句执行到从库的数据库中,确保从库的状态与主库一致。
mysql主从实现过程
于 2025-01-03 16:34:06 首次发布