zoukankan      html  css  js  c++  java
  • 1109关于redo_Log和undo_log和BIN-LOG

    转自http://www.cnblogs.com/Bozh/archive/2013/03/18/2966494.html

    三者之间的区别
    BIN-LOG 一个对应BINLOG文件
    REDO-LOG 对应ib_logfile0
    UNDO-LOG 对应ib_logfile0

    第一:REDO LOG是在INNODB存储引擎层产生,而BINLOG是MYSQL数据库的上层产生的,并且二进制日志不仅仅针对INNODB存储引擎,MYSQL数据库中的任何存储引擎对于数据库的更改都会产生二进制日志。

    第二:两种日志记录的内容形式不同。MYSQL的BINLOG是逻辑日志,其记录是对应的SQL语句。而INNODB存储引擎层面的重做日志是物理日志。

    第三:两种日志与记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写入。

    而INNODB存储引擎的重做日志在事务进行中不断地被写入,并日志不是随事务提交的顺序进行写入的。

    二进制日志仅在事务提交时记录,并且对于每一个事务,仅在事务提交时记录,并且对于每一个事务,仅包含对应事务的一个日志。

    而对于INNODB存储引擎的重做日志,由于其记录是物理操作日志,

    因此每个事务对应多个日志条目,并且事务的重做日志写入是并发的,并非在事务提交时写入,做其在文件中记录的顺序并非是事务开始的顺序。

    --LOGS-BIN和--LOGS-SLAVE-updates


    -- 开启二进制log_bin
    SHOW VARIABLES LIKE '%log_bin%';

    -- 开启将执行SQL语句转化为二进制日志文件
    SHOW VARIABLES LIKE '%log_slave_updates%';


    RESET MASTER;-- 删除日志文件


    --LOGS-SLAVE-updates
    通常情况,从服务器从主服务器接收到的更新不记入它的二进制日志。该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。为 了使该选项生效,还必须用--LOGS-BIN选项启动从服务器以启用二进制日志。如果想要应用链式复制服务器,应使用--LOGS-SLAVE- updates。例如,可能你想要这样设置:

    A -> B -> C

    也就是说,A为从服务器B的主服务器,B为从服务器C的主服务器。为了能工作,B必须既为主服务器又为从服务器。你必须用--LOGS-BIN启动 A和B以启用二进制日志,并且用--LOGS-SLAVE-updates选项启动B。

    以上是摘自MySQL对于LOGS-SLAVE-updates启动选项的描述。
    当然LOGS-SLAVE-upates也可以写入my.cnf :
    //////////////////
    log_slave_updates=1
    //////////////////

    当然在这种机制下可能有的同学会存在这么个问题:
    如果a->b b->a 这样的双MASTER架构下,a,b都打开log_slave_updates选项会不会出现无限循环的状态。
    mysql已经考滤到了这个问题,每条BIN-LOG都会记录执行语句的源server_id.当SLAVE读到语句的server_id等于本身的ID 的时候,不会忽略执行,所以我们不用担心a,b会不会无限循环下去。

    基于以上这种情况,mysql的REPLICATION集群将更加灵活,你如果需要可以做成各种各样的链式复制。比如 a->b b->a b中设置log_slave_updates后还可以b->c. 这样a,c中的数据也是一致的。

    -- 比较常用的语句 查看事件信息
    SHOW BINLOG EVENTS IN 'mysql-bin.000031';

    Log_name Pos Event_type Server_id End_log_pos Info
    mysql-bin.000031 4 Format_desc 111 123 SERVER ver: 5.7.14-LOG, BINLOG ver: 4
    mysql-bin.000031 123 Previous_gtids 111 154
    mysql-bin.000031 154 Anonymous_Gtid 111 219 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
    mysql-bin.000031 219 QUERY 111 309 BEGIN
    mysql-bin.000031 309 Intvar 111 341 INSERT_ID=4980699
    mysql-bin.000031 341 QUERY 111 475 USE `copy_db`; INSERT INTO admin_log_info(admin_id) VALUES (555)
    mysql-bin.000031 475 Xid 111 506 COMMIT /* xid=1450 */

    SHOW VARIABLES LIKE '%innodb_flush_log_at_trx_commit%';

    SHOW VARIABLES LIKE '%innodb%';

    SHOW VARIABLES LIKE 'innodb_max_undo_log_size'

    SHOW VARIABLES LIKE 'innodb_undo_logs'

    SHOW VARIABLES LIKE '%innodb_log_file_size%';

    SHOW VARIABLES LIKE '%innodb_log_files_in_group%';

    三者之间的区别
    BIN-LOG 一个对应BINLOG文件
    REDO-LOG 对应ib_logfile0
    UNDO-LOG 对应ib_logfile0

    SHOW BINLOG EVENTS

  • 相关阅读:
    【动态规划】51nod1780 完美序列
    【树形dp】bzoj4726: [POI2017]Sabota?
    初涉manacher
    【数位dp】bzoj3131: [Sdoi2013]淘金
    【思维题 kmp 构造】bzoj4974: [Lydsy1708月赛]字符串大师
    web框架
    Bootstrap补充
    jQuery之jQuery扩展和事件
    JQuery之文档操作
    JQuery之属性操作
  • 原文地址:https://www.cnblogs.com/qcfeng/p/6046889.html
Copyright © 2011-2022 走看看