
# 通过异步复制方式进行MySQL容灾介绍
MySQL Replication是MySQL非常出色的一个功能，该功能将一个MySQL实例中的数据复制到另一个MySQL实例中。整个过程是异步进行的，但由于其高效的性能设计，复制的延时非常小。MySQL复制功能在实际的应用场景中被广泛的应用于保证数据系统数据的安全性和可扩展设计中。
在本场景中，通过MySQL的Replication功能来进行容灾。
#### MySQL Replication的基本原理
MySQL的复制（Replication）是一个异步的复制，从一个MySQL instance（称之为Master）复制到另一个MySQL instance（称之为Slave）。
实现整个复制操作主要由三个进程完成的，其中两个进程在Slave（Sql进程和IO进程），另外一个进程在Master（IO进程）上。要实施复制，首先必须打开Master端的binary log功能，因为整个复制过程实际上就是Slave从Master端获取该日志，然后再在自身完全顺序地执行日志中所记录的各种操作，从而与Master保持一致的过程。
复制的基本过程如下：
1. Master将用户对数据库更新的操作以二进制格式保存到binary log类型的日志文件中。
2. Slave上面的IO进程连接上Master，并请求从指定日志文件的指定位置（或者从最开始的日志）之后的日志内容。
3. Master接收到来自Slave的IO进程的请求后，通过负责复制的IO进程，根据请求信息读取制定日志指定位置之后的日志信息，返回给Slave的IO进程。 返回信息中除了日志所包含的信息之外，还包括本次返回的信息对应的文件名及在文件中的位置。
   
4. Slave的IO进程接收到信息后，将接收到的日志内容依次添加到Slave端的relay log文件的最末端，并将读取到的Master端的binary log的文件名和位置记录到master-info文件中，以便在下一次读取的时候能够清楚的告诉Master"我需要从某个binary log的哪个位置开始往后的日志内容，请发给我"。
5. Slave的Sql进程检测到relay log中新增加了内容后，会马上解析relay log的内容成为在Master端真实执行时候的那些可执行的内容，并在自身执行。
 
