MySQL的复制是一种高性能高可用的解决方案,在主从之间进行复制、重放数据。
复制(replication)首先会把主
服务器的数据更改
写入binlog
二进制文件中,从
服务器的I/O线程
从binlog
中拉取
数据,存入
本地的relay log
中继日志中,然后由SQL线程
读取并重放
到从服务器中。
由于整个复制的过程是异步实时
的,所以可能会存在在主从同步的延迟
现象,这个延迟可能是一秒、一分、一小时,甚至一天,数据量越大,主服务器的压力
就越大。
MySQL支持的复制方式包含有:row(行)、statement(语句)、mixed(行+语句)。
首先是基于行
的复制方式,这种方式只会在binlog
文件中记录最终
的修改的记录
的结果,在一些复杂
查询下却返回较少
数据情况下比较适用,但兼容性
也不好,一旦修改列的话,就会出现问题,并且随着行数的增多,binlog
文件也会膨胀
。
接着是基于语句
的复制方式,这种方式会在binlog
文件中记录操作的SQL语句
,相比基于行的方式来说,SQL语句更容易理解
且遇到问题的时候也较好定位
,在占用的体积
上来说也小
了许多。当然,基于语句
的复制方式也存在着数据操作范围不可控的风险
,同样,一旦修改列的话,也可能会出现问题。
最后是mixed
这种方式,结合
了基于行
的复制方式和基于语句
的复制方式,取二者的优点。