MySQL复制特性

一、复制特性

1.1MySQL复制有两种不同的模式

         .基于语句的复制(Statement  Based  Replication):基于实际执行的SQL语句的模式方案,简称SBR;

          基于记录的复制(Row Based  Replication):基于修改的列的复制模式,RBA;

          基于以上两种复制模式混合模式(Mixed Based  Replication MBR).

1.2.复制特性的实施原理和关键因素

      复制特性实施的核心,就是基于Master节点对数据库中各项变更的处理机制。Mysql数据库启用二进制日志以后,该文件就会记录MySQL服务自启动以来,所有对数据库结构或内容(数据)变更的事件(即增/删/改),当然,SELECT语句由于不会触发结构上的变更,因此select语句不会被记录。

      Slave节点只要连接到Master节点,请求这些二进制日志,拿到这些二进制日志以后,Slave节点就能解析这些二进制日志,并在本地执行,这样就相当于将修改操作在Slave节点进行重演。日志应用完成以后,Slave节点就和Master节点一样了。

 1.3复制格式

  Mysql的复制特性,主要依赖于二进制日志。因为Master节点将所有的时间都记录到二进制日志中。二进制日志在记录事件时候,支持多种格式,由binlog_format参数控制:

       基于语句记录(Statement-Based Logging,SBL)对应的参数值为statement;

       基于行格式记录(Row-Based logging,RBL)对应的参数值为row;

       混合模式记录(Mixed-Based logging,MBL)对应参数为mixed。   

二、各种复制模式的优缺点

 2.1使用SBR(Statement Based  Replication)优点

          生成日志少;

           能够记录下数据库做过的操作,日志可用于行为审计;

2.2 使用SBR(Statement-Based Replication)缺点

          有主从不一致风险;

           执行insert......select语句时候需要更多的行锁;

           UPDATE扫表时候需要更多的行锁;

            如果语句在Slave节点执行操作失败,会增加主从不一致的风险。

2.3使用RBR(Row Based Replication) 优点

          所有的修改都能安全的复制到Slave节点

          Master节点执行修改操作时候,仅需要极少的锁持有,因此可以获得更高的并发性;

         Slave节点执行INSERT/UPDATE/DELETE时候也仅需少量锁。

2.4使用RBR(Row  Based  Replication)缺点

        RBR会生产更多的日志,日志会记录了所有变化的行到二进制日志文件;

三、中继日志文件和状态文件

 3.1中继日志       

    MySQL数据库有二进制日志文件,用于记录所有执行的变更事件,复制特性正是基于这类文件实现复制操作。Slave节点有两个进程,其中IO_THREAD线程用于接收和保存二进制日志,SQL_THREAD用于应用这些日志,IO_THREAD接收的二进制日志就保存在中继日志(Relay  Log)。

          二进制日志用于保存自身产生的事件,中继日志保存接收的其他节点的事件。

3.2状态文件

        master.info保存复制环境中连接master节点的配置信息。

        relay-log.info  保存处理进度及中继日志的位置。

四.复制过滤规则

           对于Master节点,可以通过binlog-do-db 以及binlog-ignore-db参数,控制那些数据库下的操作事件将被记录或者不被记录,也可以在回话级别所做的操作是否记录到二进制日志。

4.1库级过滤规则

          Master节点在执行修改操作,或者说在写入本地二进制日志文件时候,由--binlog-do-db或者--binlog--ignore--db两个参数控制在指定的数据库中对象的变更事件是否记录到二进制日志文件中;

          Slave节点在应用日志时候,也有--replicate-do-db或者--replicate-ignore-db两个选项是否应用指定数据库的变更事件。

4.2表级别的过滤规则

        MySQl复制特性的过滤规则,是先检查数据库级别的设置,当数据库级别参数无有效配置时候,在检查表级别的过滤参数。

        Slave节点要检查是否基于语句复制(SBR),如果是那么Slave节点执行语句并退出,如果是RBR,则不会应用。

        如果制定了--replicate-do-table 或者--replicate-wild-do-table参数,则只执行参数中指定对象的修改事件;

        如果指定了--replicate-ignore-table或者--replicate-wild-ignore-table参数,则除了参数中指定对象的修改事件不执行外,其他时间都要修改;

        既有库级别参数,也有表级别参数,先执行库级别参数,后执行表级别参数。

五、Slave节点执行备份的原理

       停止Slave服务中的SQL_THREAD线程;

       记录当前接收和应用的二进制日志文件及位置;

       执行备份命令;

       再次记录当前接收和应用的二进制文件及位置;

       启动Slave服务器中的SQL_THREAD线程。

六、部署级联Slave

       在Slave节点加上参数 --log-slave-updates参数,即使是中继日志产生的数据库修改,也将写到本地的二进制日志文件中;

       当然Slave节点也要指定log-bin参数启用二进制;

       然后其他子Slave节点就可以把这个Slave节点当作Master节点了。

posted @ 2022-08-15 05:55  中仕  阅读(11)  评论(0编辑  收藏  举报