复制架构

主从模式A→B

生产中一般建议部署为主从模式,这也是最稳健的一种方式。

主主模式A←→B

为了方便切换,在一定程度上提高可用性,也可以选择主主模式。需要注意的是,主主模式必须确保任何时刻都只有一个数据库是主动(Active)状态,也就是说同一个时刻只能写入一个主(Master)节点,否则可能导致数据异常。

链式复制模式A→B→C / 环形复制模式A→B→C→A

链式或环形复制在生产中很少用到,它们的主要缺点在于,随着节点的增加,整个复制系统的稳健性会下降。

复制原理

在主库的二进制日志里记录了对数据库的变更,从库从主库那里获取日志,然后在从库中重放这部分日志,从而实现数据的同步。

MySQL使用3个线程来执行复制功能,其中1个在主服务器上,另两个在从服务器上。

当从服务器发出START SLAVE命令时,从服务器将创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。

主服务器可创建一个线程将二进制日志中的内容发送到从服务器中。该线程可以识别为主服务器上SHOW PROCESSLIST输出中的Binlog Dump线程。

从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据复制到从服务器数据目录中的本地文件中,即中继日志。

第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中所包含的更新。

注意事项

复制模式