美文网首页
浅析Mysql主从复制

浅析Mysql主从复制

作者: 封心_SH | 来源:发表于2019-10-14 19:37 被阅读0次

    我们先从什么是主从复制说起。

    什么是主从复制

    简单来说,就是创建一个和主数据库一样的数据库,称为从数据库,从数据库同步主数据库中的数据,两者完整且独立。

    为什么要主从复制

    在业务比较简单的系统中,一台服务器基本能完成日常需求。但很多时候,系统和用户的规模都比较大,大量请求如果都集中在一台MySQL服务器上,磁盘I/O的频率较高,导致系统的性能急剧下降。

    使用主从复制,让主(master)数据库写,从(slave)数据库读,即读写分离,这样slave可以分担master的压力,降低单台机器的I/O频率,提升系统的性能。

    另外,slave同步master的数据,一旦master因故障宕机,slave可以临时替代master的位置,降低系统瘫痪的风险。


    怎样进行主从复制

    在介绍主从复制原理之前,先了解一下MySQL的binlog文件。

    binlog是MySQL中一个二进制日志文件,专门用于记录除了select和show之外的任何使数据发生变化的sql语句,如create、alter、insert、delete等。一旦服务器启动,binlog文件就会进行记录。

    主从复制分以下几个步骤:

    ①主库的更新操作被记录到binlog文件中;

    ②从库连接主库;

    ③主库开启binlog dump线程,将binlog文件内容传输到从库;

    ④从库创建I/O线程,将主库的binlog内容存进relay log文件中;

    ⑤从库同时又创建一个SQL进程,读取并执行relay log文件中的更新操作,并将更新内容写入从库。

    可以看到,在主从复制的整个流程中,主库开启了一个线程,从库开启了两个线程。

    但是请注意,主从复制是一个异步过程,所以并不是按照上述这个步骤逐步进行的。
    下面是主从复制的原理图:


    MySQL主从复制确实能带来很多好处,但是也伴随着一个常见问题:从库读延迟怎么办?
    可能有读者不太理解这个问题是什么意思,我们详细说下。

    slave开启SQL线程执行binlog中的更新操作(DDL和DML)时,DDL和DML的执行是随机的,且是单线程的(master可以并发),那么就有可能在与其它查询语句争夺时“卡住”,后面的语句就需要等它执行完才能执行,这样就造成延迟,降低了主从库的数据一致性和实时性。

    相应地也有一些解决办法,如关闭从库的binlog,更换更好的从库硬件设备等,具体问题具体对待,且笔者在此方面并无经验,就不展开了。

    以上是对MySQL主从复制做的一个浅析,其实还有很多问题等待解决,欢迎各位深入学习。

    ———— / END / ————



    相关文章

      网友评论

          本文标题:浅析Mysql主从复制

          本文链接:https://www.haomeiwen.com/subject/cwkdmctx.html