主从复制
复制功能
- 数据分布
- 负载均衡(读)
- 备份
- 高可用和故障切换
- MySQL 升级测试
复制原理
Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的 SQL 语句(insert,update,delete,ALTER TABLE,grant 等等)。
主从复制的原理其实就是把主服务器上的 BIN 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。
复制流程图
复制过程
- 主节点必须启用二进制日志,记录任何修改数据库数据的事件。
- 从节点开启一个线程 (I/O Thread) 把自己扮演成 mysql 的客户端,通过 mysql 协议,请求主节点的二进制日志文件中的事件
- 主节点启动一个线程 (dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点。
- 从节点接收到主节点发送过来的数据把它放置到中继日志 (Relay log) 文件中。并记录该次请求到主节点的具哪个二进制日志文件的哪个位置。
- 从节点启动另外一个线程 (sql Thread ),把 replaylog 中的事件读取出来,并在本地再执行一次。
复制中线程的作用
主节点:
- Dump Thread:为每个 Slave 的 I/O Thread启动一个 dump 线程,用于向从节点发送二进制事件。
从节点:
- I/O Thread:从 Master 请求二进制日志事件,并保存于中继日志中。
- Sql Thread:从中继日志中读取日志事件,在本地完成重放。