美文网首页
数据库如何实现主从同步

数据库如何实现主从同步

作者: 摸摸脸上的胡渣 | 来源:发表于2020-02-14 10:53 被阅读0次

    关键功臣

    binlog
    binlog不只是主从同步的功臣,更是MySQL变成流行框架的关键因素,几乎所有的高可用架构都是基于binlog实现的。

    同步流程

    slave 同步

    binlog格式

    有三种

    1. statement
      内容:直接记录要执行的sql语句


      image.png

    优点:节省空间-相对row来说
    缺点:当主从数据库的表结构-索引不一致时,可能会引起数据的误操作。
    举例:假设有这样一个库

    
    mysql> CREATE TABLE `t` (
      `id` int(11) NOT NULL,
      `a` int(11) DEFAULT NULL,
      `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`),
      KEY `a` (`a`),
      KEY `t_modified`(`t_modified`)
    ) ENGINE=InnoDB;
    
    insert into t values(1,1,'2018-11-13');
    insert into t values(2,2,'2018-11-12');
    insert into t values(4,4,'2018-11-10');
    insert into t values(5,5,'2018-11-09');
    

    按照a字段索引进行排序时,数据为

    1,1,'2018-11-13'
    2,2,'2018-11-12'
    4,4,'2018-11-10'
    5,5,'2018-11-09'
    

    按照t_modefied字段索引进行排序时,数据为

    5,5,'2018-11-09'
    4,4,'2018-11-10'
    2,2,'2018-11-12'
    1,1,'2018-11-13'
    

    可以看出来,按照不同索引进行排序,limit1对应的数据并不是一行。如果主库备库的索引结构不一致,或者是在主库更改索引结构完成、从库还没更改索引结构完成的间隙,执行了statement格式的binlog,那么就会出现主从数据不一致的问题。
    数据库会认为这样的操作是有风险的,所以会在warning中记录一条数据。

    1. row
      内容:记录库名、表名、被操作数据的主键id,以及操作类型


      image.png

      优点:因为准确的记录主键id,所以不会出现binlog导致的主备库数据不一致。
      缺点:相比于statement格式,row格式的数据会占用大量的空间。

    2. mixed
      row+statement
      数据库会根据sql语句的内容和类型,进行判断,认为用statement格式存储数据不会引起不一致时,就采用statement格式。当认为会出现,就采用row格式。

    相关文章

      网友评论

          本文标题:数据库如何实现主从同步

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