主从复制

主要涉及三个线程

  • binlog 线程 :负责将主服务器上的数据更改写入二进制日志(Binary log)中。
  • I/O 线程 :负责从主服务器上读取二进制日志,并写入从服务器的中继日志(Relay log)。
  • SQL 线程 :负责读取中继日志,解析出主服务器已经执行的数据更改并在从服务器中重放(Replay)。

MySQL复制 - 图1

MySQL 复制过程

  1. master 将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events
  2. slave 将master 的binary log events 拷贝到它的中继日志(relay log)
  3. slave 重做中继日志中的事件,将改变应用到自己的数据库中

MySQL 复制是异步的且串行化的

复制的基本原则

  • 每个slave 只有一个master
  • 每个slave 只能有一个唯一的服务器ID
  • 每个master 可以有多个salve

读写分离

主服务器处理写操作以及实时性要求比较高的读操作,而从服务器处理读操作

读写分离能提高性能的原因在于:

  • 主从服务器负责各自的读和写,极大程度缓解了锁的争用
  • 从服务器可以使用 MyISAM,提升查询性能以及节约系统开销
  • 增加冗余,提高可用性

读写分离常用代理方式来实现,代理服务器接收应用层传来的读写请求,然后决定转发到哪个服务器
MySQL复制 - 图2