0%

MySQL - 复制原理

MySQL的复制是一种高性能高可用的解决方案,在主从之间进行复制、重放数据。

mysql-repl

复制(replication)首先会把服务器的数据更改写入binlog二进制文件中,服务器的I/O线程binlog拉取数据,存入本地的relay log中继日志中,然后由SQL线程读取并重放到从服务器中。

由于整个复制的过程是异步实时的,所以可能会存在在主从同步的延迟现象,这个延迟可能是一秒、一分、一小时,甚至一天,数据量越大,主服务器的压力就越大。

MySQL支持的复制方式包含有:row(行)、statement(语句)、mixed(行+语句)。

首先是基于的复制方式,这种方式只会在binlog文件中记录最终的修改的记录的结果,在一些复杂查询下却返回较少数据情况下比较适用,但兼容性也不好,一旦修改列的话,就会出现问题,并且随着行数的增多,binlog文件也会膨胀

接着是基于语句的复制方式,这种方式会在binlog文件中记录操作的SQL语句,相比基于行的方式来说,SQL语句更容易理解且遇到问题的时候也较好定位,在占用的体积上来说也了许多。当然,基于语句的复制方式也存在着数据操作范围不可控的风险,同样,一旦修改列的话,也可能会出现问题。

最后是mixed这种方式,结合了基于的复制方式和基于语句的复制方式,取二者的优点。