MySQL之binlog底层原理分析

作者: jerrik | 来源:发表于2018-07-21 17:24 被阅读14次

    最近在准备看MySQL相关的内容,简单的整理一下binlog的原理,加深理解。

    binlog基本认识

    MySQL中的binlog是一个二进制文件,它记录了所有的增删改操作。节点之间的复制就是依靠binlog来完成的。binlog具有三种模式:

    • Row模式
      日志中会记录成每一行数据被修改的日志,然后在slave端再对相同的数据进行修改。例如:update xxx where id in(1,2,3,4,5);采用该模式则会记录5条记录。
    • statement模式
      每一条会修改数据的sql都会记录到 master的binlog中。slave在复制的时候sql Thread会解析成和原来master端执行过的相同的sql来再次执行.
    • mixed模式
      Mixed即混合模式,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
      新版本中的Statment level还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。
    binlog之主从同步流程
    binlog同步流程
    大体执行流程:
    Master执行完增删改操作后都会记录binlog日志,当需要同步的时候会主动通知slave节点,slave收到通知后使用IO Thread主动去master读取binlog日志,然后异步写入relay日志(中转日志),然后使 SQL Thread完成对`relay日志 的解析然后入库操作,完成同步。

    相关文章

      网友评论

      本文标题:MySQL之binlog底层原理分析

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