说明
主从复制(也称 AB 复制)将 MySQL主服务器 的数据 复制 到一个或多个 MySQL从服务器
复制方式
- 主–从复制
- 主–主复制
- 半同步复制
主–从复制 的角色
主从复制中分为:
- 主服务器(主节点,master),增删改在主节点上进行
- 从服务器(从节点,slave),查询在一个或多个从节点上进行
可以提高写入性能,读取速度。
应用场景
- 负载均衡,提高性能。读写分离,主节点负责 增删改,从节点负责 查询
- 实时备份,用于故障切换
二进制日志 binlog
主节点需要开启 二进制日志 binlog,执行正删改时,都会记录到该日志中
主从复制过程
master主节点,将数据的改变记录 二进制 binlog日志
slave从节点,开启一个线程(I/O Thread),通过 mysql 协议,请求主节点的二进制日志文件中的事件
master主节点,启动一个线程(dump Thread),检查二进制日志binlog,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件发送给slave从节点。
slave从节点,接收到 master主节点 发送过来的数据,将其保存到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个)。
slave从节点,启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次。
复制中线程的作用
从节点
- I/O Thread:从 Master 节点请求二进制日志事件,并保存于中继日志
Relay log
中。 - Sql Thread:从
Relay log
中读取日志事件并在本地完成重放。
主节点:
- Dump Thread:为每个 Slave 的 I/O Thread 启动一个 dump 线程,用于向从节点发送二进制事件。
特点
主从复制的过程是一个 异步的过程。主节点执行 增删改操作时,主节点把写的数据在本地操作完成后,不需要同时发送给从服务器,并等待从服务器反馈写入完成,再响应用户。主节点只需要把写入操作在本地完成,就响应用户。
主从数据不一致。从节点中的数据有可能会落后主节点,可以使用其他软件检查是否落后
读写分离的好处: 整体的服务性能提高,即使写操作时间比较长,也不影响读操作的进行。
参考:
https://blog.csdn.net/daicooper/article/details/79905660
https://zhuanlan.zhihu.com/p/164518315
https://zhuanlan.zhihu.com/p/96212530