mysql的主从复制简介

        主从复制的前提是主从架构,那么mysql为什么要搭建主从架构呢?mysql搭建主从架构主要是为了提高服务性能,如果我们搭建的是单节点的mysql服务的话,因为有时写操作会锁表,而一旦某张表被锁了,就会阻塞后续对于这张表的读请求,直到锁被释放,这是非常影响mysql的服务性能的,所以我们要去搭建mysql主从,让从节点去复制主节点的数据,然后让主从实现读写分离,主节点负责写,从节点负责读,这样即便是主节点被锁表了,也不影响从节点上的读服务,能提高mysql的服务性能,提高吞吐量。

        mysql的主从架构有这么几种:一主一从、一主多从、多主一从、主主复制、级联复制。

        一主一从和一主多从很好理解,就是为主节点部署一个或多个从节点,让它们去复制主节点的数据。

        多主一从是让同一个从库复制多个主库的数据,它的应用场景主要是为了实现数据汇总,以便实现统计分析,从mysql5.7之后开始支持。

        主主复制是让两个节点互为主从,当然只有一个是真正的主,当主节点宕机时,另外一个主节点可以继续提供服务,当宕机的主节点恢复时,因为它还是现在的主节点的从节点,所以它依然能够从当前的主节点上复制数据,没有脱离复制环境,主主复制适用于需要进行主从切换的场景。

        级联复制的出现,是因为一主多从架构有一个弊端:因为为了实现主从复制,主节点需要为每一个从节点开启一个binlog线程推送数据,所以当从节点的数量比较多时,主节点的线程开销就会比较大,io压力也会比较大,所以级联复制就应运而生了,级联复制是在主节点和从节点之间部署一个二级主节点,在执行主从复制时,主节点将数据推送给二级主节点,由二级主节点推送数据给各个从节点,这样就降低了主节点的复制压力。

        那么主从复制是怎么实现的呢?主从复制的实现要依赖于三个线程两个文件,三个线程分别是:主节点的binlog线程、从节点的io线程和sql线程;两个文件分别是:主节点的bin.log文件、从节点的relay.log文件。主节点的bin.log文件是一个二进制文件,负责存储主节点收到的所有的写操作,从节点的relay.log文件负责存储主节点推送的binlog更新。在执行主从复制时,主节点的binlog线程负责将binlog更新推送给从节点,从节点的io线程在收到推送之后将数据保存在本地的relay,log中,然后由sql线程来执行relay.log的更新,执行完毕,就将数据复制到了从节点。

        mysql支持两种主从复制方式:异步复制和半同步复制。异步复制是:当主节点往从节点推送数据时,它并不关心从节点是否将数据成功保存到了relay.log中,更不关心从节点的sql线程是否成功执行了relay.log,主节点会直接想客户端返回成功;半同步复制是:主节点往从节点推送数据时,只要保证有一个从节点收到了数据并保存到了relay.log中,就向客户端返回成功。无论mysql用的是异步复制还是半同步复制,从节点的数据都会有延迟,半同步复制方式的延迟为从节点的sql线程执行relay.log的耗时,异步复制方式的延迟为从节点的io线程保存更新到relay.log的耗时+sql线程执行relay.log更新的耗时。

        mysql默认使用半同步复制方式,当因为网络原因,主节点收不到从节点的成功响应时,主节点会等待一定时间,在等待超时之后会将复制方式由半同步改为异步,当网络恢复,从节点重新连接到主节点时,又会将复制方式由异步改回半同步。

你可能感兴趣的:(mysql,数据库)