MySQL 主从复制 + 读写分离

一、主从复制

1. 核心作用

  • 数据冗余备份、故障恢复
  • 实现读写分离、分摊主库压力
  • 提升并发能力、避免锁冲突

2. 三核心组件

  1. binlog 二进制日志(主库):记录所有写操作
  2. IO 线程(从库):拉取主库 binlog → 写入 relay-log
  3. SQL 线程(从库):重放中继日志 → 保持数据一致

3. 完整流程

在这里插入图片描述

  1. 主库执行写操作,写入 binlog
  2. 从库 IO 线程连接主库请求日志
  3. 主库 dump 线程发送 binlog
  4. 从库写入 relay-log(中继日志)
  5. 从库 SQL 线程重放 SQL
  6. 主从数据保持一致

4. 实验拓扑

  • mysql-master:192.168.108.101(主)
  • mysql-slave01:192.168.108.102(从 1)
  • mysql-slave02:192.168.108.103(从 2)
  • amoeba:192.168.108.110(代理)
  • mysql-client:192.168.108.111(客户端)

5. 主库配置要点

  • server-id = 11(唯一)
  • log-bin = master-bin(开启 binlog)
  • 授权复制账号:myslave/123456
  • 记录 FilePosition

6. 从库配置要点

  • server-id 唯一(22、23)

  • relay-log = relay-log-bin

  • 克隆机必须删除 auto.cnf 避免 UUID 冲突

  • change master to 指定主库信息

  • 验证:

    show slave status\G
    

    必须两个 YES

    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes

二、读写分离(基于 Amoeba 代理)

1. 核心规则

  • 写操作(INSERT/UPDATE/DELETE)→ 主库
  • 读操作(SELECT)→ 从库(轮询负载均衡)

2. 实现方式

基于中间代理层 Amoeba

  • 架构:客户端 → Amoeba → MySQL 主从
  • Amoeba 自动路由 SQL,对应用透明

在这里插入图片描述

3. 账号体系

  • 主从复制账号:myslave/123456
  • Amoeba 连接 MySQL:test/123.com
  • 客户端连接 Amoeba:amoeba/123456

4. Amoeba 核心配置

  1. dbServers.xml

    • 定义 master、slave1、slave2
    • 定义 readPool 负载均衡(轮询)
  2. amoeba.xml

    • 代理端口:8066
    • writePool = master
    • readPool = readPool

5. 整体流程

  1. 客户端连接 Amoeba:8066
  2. 写 SQL → 转发 Master
  3. 读 SQL → 轮询转发 Slave1/Slave2
  4. 主从复制保证数据一致

三、总结

  • 主从复制:主库写 binlog,从库 IO 拉日志、SQL 重放,实现数据实时同步。
  • 读写分离:写走主库,读走从库,由 Amoeba 自动路由,提升性能与高可用。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐