MySQL主备复制原理

首先,MySQL主备复制有什么作用?
  • 数据分布
    在不同的地理位置分布数据备份,这对于具有大数据的公司尤为重要。

  • 负载均衡
    通常用作读写分离,将读操作分布到多个服务器上,实现对读密集型应用的优化,并且实现很方便,通过简单的代码修改就能实现基本的负载均衡。

  • 备份
    复制既不是备份也不能够取代备份,但对于备份来说,复制是一项很有意义的技术补充。

  • 高可用性和故障切换
    复制能够帮助应用程序避免MySQL单点失败,一个包含复制的设计良好的故障切换系统能够显著的缩短宕机时间。

  • MySQL升级测试
    在将要升级全部实例前,使用一个更高版本的MySQL作为备库,测试查询是否能够在备库按照预期执行。

那么,MySQL主备复制是如何工作的呢?

一般复制分为三个步骤:

  1. 主库把数据变更记录到二进制日志(Binary Log)中(这些记录也被称为二进制日志事件)

  2. 备库从主库上的二进制日志中读取二进制日志事件,并写在自己的中继日志(Relay Log)中。备库读取日志的方式不是轮询的方式,主备库的关系有点像日本漫画与动画的关系。当动画(备库复制日志)追赶上漫画(主库没有新的事件)的时候,动画制作就会先停止(备库读日志线程会进入睡眼状态),当漫画有更新时(主库有新的事件),动画(备库)被唤醒,接着制作(读取)

  3. 备库读取中继日志中的事件,将其重放到备库数据之上

如下图所示:
MySQL主备复制工作示意图