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

  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/qcfeng/p/6046889.html
Copyright © 2011-2022 走看看