zoukankan      html  css  js  c++  java
  • 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication 基于语句和行的复制的优势和劣势

    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication  基于语句和行的复制的优势和劣势
    
    
    每个binary logging格式有优势和劣势,对于很多用户, mixed replication 格式提供了最好的数据完整性和性能的组合。
    
    如果,然而, 你需要利用特定功能基于语句的或者基于行格式的 当执行某个人物,
    
    你可以使用这个章节的信息,提供了他们的优势和劣势的一个总结,
    
    
    
    
        Advantages of statement-based replication
    
        Disadvantages of statement-based replication
    
        Advantages of row-based replication
    
        Disadvantages of row-based replication 
    
    
    基于语句复制的优点:
    
    
    1.成熟的技术
    
    2.更少的数据写入到Log files.当更新或者删除 影响很多行,这个导致更少的存储空间需要对于日志文件。
    
    这也意者着从备份恢复可以迅速的完成
    
    
    3.日志文件包含所有改变的语句,可以用于审计数据库
    
    
    
    statement-based replication 的缺点
    
    1. 语句是不安全的对于SBR,并不是所有修改语句(比如INSERT DELETE, UPDATE, and REPLACE statements) 
    
    可以被复制使用基于语句复制。
    
    任何不确定行为是很难被复制使用基于语句的,比如DML包含如下:
    
    
    一个语句取决于一个UDF 或者存储过程 是不确定的,
    
    
    因为这样的UDF或者存储程序或者依赖的因素返回的值不同于参数提供的值。
    
    
    行格式复制,然而, 简单的复制UDF或者存储过程返回的值
    
    
    DELEET 和UPDATE 语句使用一个LIMIT 子句没有一个ORDER BY 是不确定的
    
    
    语句使用下面的函数不能被正确的复制使用基于语句选项:
    
    
    
    
        LOAD_FILE()
    
        UUID(), UUID_SHORT()
    
        USER()
    
        FOUND_ROWS()
    
        SYSDATE() (unless both the master and the slave are started with the --sysdate-is-now option)
    
        GET_LOCK()
    
        IS_FREE_LOCK()
    
        IS_USED_LOCK()
    
        MASTER_POS_WAIT()
    
        RAND()
    
        RELEASE_LOCK()
    
        SLEEP()
    
        VERSION() 
    
    1. INSERT ... SELECT  需要大量的row-level locks 相比基于行的复制
    
    2.UPDATE语句 需要一个表扫描(没有index是被使用在WHERE子句)必须锁住大量的行,相比基于行复制
    
    3.对于InnoDB:一个INSERT 语句使用 AUTO_INCREMENT  堵塞其他不冲突的INSERT 语句
    
    4.对于复杂语句,语句必须被评估和被执行在slave上在记录被更新或者插入前。
    
    
    1.在基于行的复制, slave只需要修改影响的行,不是执行整个语句
    
    
    
    2.如果这里有个错误在slave上评估的时候,特别是当执行复杂的语句,基于语句的复制可能缓慢的增加错误的幅度根据影响的行
    
    
    3.存储过程执行相同的NOW()值作为调用语句,然而, 这是不正确的过程
    
    
    Advantages of row-based replication 基于记录的复制的优点
    
    
    所有的改变可以被复制,这是最安全的复制形式
    
    注意:
    
     语句 更新信息在mysql 数据库 比如GRANT, REVOKE和触发器操作,存储函数(包含存储过程)
    
    
    和事务 都被复制到slaves 使用基于语句的复制
    
    
    对于语句比如CREATE TABLE ... SELECT ,一个CREATE 语句是生成一个表定义和复制使用基于语句复制,
    
    记录插入时复制使用基于记录的格式。
    
    
    
    
    这个技术是和很多书其他数据库管理系统相似
    
    
    
    很少的row locks 是需要的在master上, 从而实现高并发,对于以下类型的语句:
    
    
    
        INSERT ... SELECT
    
        INSERT statements with AUTO_INCREMENT
    
        UPDATE or DELETE statements with WHERE clauses that do not use keys or do not change most of the examined rows. 
    
    
    基于行的复制缺点:
    
    RBR 可以产生更多以的数据 必须被记录,复制一个DML 语句(比如一个UPDATE或者DELETE 语句).
    
    
    基于语句的复制只写语句到Binary log.
    
    与之相反,  row-based replication 写每个changed 记录到每个binary log.
    
    
    如果语句改变很多记录,基于行复制可能写很多的数据到binary log.
    
    
    这是真的即使语句被回滚。
    
    
    这也意味着从备份恢复需要更久的时间。此外, binary log 是锁住很多时间来写数据,
    
    这个可能会导致并发问题。使用 binlog_row_image=minimal
    
    
    mysql> show variables like '%binlog_row_image%';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | binlog_row_image | FULL  |
    +------------------+-------+
    1 row in set (0.00 sec)
    
    
    
    2. 确定UDFs产生大量的BLOB 值 花费很长时间来复制基于行的格式相比基于语句的。
    
    这是以为BLOB 列值是记录的,相比语句产生的数据
    
    3.对于表使用MyISAM 存储引擎,一个很强的lock 是需要的在slave上对于INSERT 语句当应用他们作为
    
    基于行的events 到binary log 相比应用它们作为语句。
    

  • 相关阅读:
    基于typora编写Markdown文档
    VMware Workstation常见的故障处理
    VMware Workstation产品常用的快捷键
    2
    1
    9
    8
    7
    6
    5
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/6198996.html
Copyright © 2011-2022 走看看