• binlog怎样参与mysql recover的


    29 July 2015

    参数介绍


    innodb_flush_log_at_trx_commit

    0: 每隔1s,系统后台线程刷log buffer,也就是把redo日志刷盘,这里会调用fsync,所以可能丢失最后1s的事务。

    1: 每次commit时,刷redo日志,确定fsync刷盘

    2: 每次提交时,刷redo日志到文件系统,不调用fsync刷盘,5.6.6之前是每隔1s刷盘,之后的版本是通过参数innodb_flush_log_at_timeout设置,默认也是1s。所以也可能丢最后一秒的事务。如果有掉电保护组件的话,可以开启。

    sync_binlog

    表示每多少个sync事件触发一次真正的binlog fsync刷盘,默认是1,表示每次commit时binlog都会fsync。

    两阶段提交


    这个两阶段提交不是分布式事务的两阶段提交,而是在开启binlog之后,redo与binlog的两阶段提交。 两阶段提交,首先redo log prepare,然后写binlog,最后redo log commit.

    • 如果redo log prepare之后,binlog之前宕机,则回滚事务,日志如下:
    2015-07-29 17:03:18 21957 [Note] Starting crash recovery...
    2015-07-29 17:03:18 7ffff7fe4780  InnoDB: Starting recovery for XA transactions...
    2015-07-29 17:03:18 7ffff7fe4780  InnoDB: Transaction 35077 in prepared state after recovery
    2015-07-29 17:03:18 7ffff7fe4780  InnoDB: Transaction contains changes to 1 rows
    2015-07-29 17:03:18 7ffff7fe4780  InnoDB: 1 transactions in prepared state after recovery
    2015-07-29 17:03:18 21957 [Note] Found 1 prepared transaction(s) in InnoDB
    2015-07-29 17:03:18 21957 [Note] rollback xid 'MySQLXid16'
    • 如果binlog写入之后宕机,则recover事务。
    2015-07-29 17:06:23 7ffff7fe4780  InnoDB: Starting recovery for XA transactions...
    2015-07-29 17:06:23 7ffff7fe4780  InnoDB: Transaction 35590 in prepared state after recovery
    2015-07-29 17:06:23 7ffff7fe4780  InnoDB: Transaction contains changes to 1 rows
    2015-07-29 17:06:23 7ffff7fe4780  InnoDB: 1 transactions in prepared state after recovery
    2015-07-29 17:06:23 22040 [Note] Found 1 prepared transaction(s) in InnoDB
    2015-07-29 17:06:23 22040 [Note] commit xid 'MySQLXid16'
    2015-07-29 17:06:23 22040 [Note] Crash recovery finished.

    什么情况下会出现binlog写入了,但是实际这条数据不存在库中?

    innodb_flush_log_at_trx_commit 为0, sync_binlog=1,此时redo log没有刷盘,binlog刷盘了,recover的时候不会根据binlog恢复。

    所以强烈建议这两个参数都设置成1.

     

  • 相关阅读:
    WCF学习之旅—WCF第二个示例(七)
    WCF学习之旅—WCF第二个示例(六)
    WCF学习之旅—WCF第二个示例(五)
    WCF学习之旅—WCF概述(四)
    WCF学习之旅——第一个WCF示例(三)
    WCF学习之旅——第一个WCF示例(二)
    WCF学习之旅——第一个WCF示例(一)
    WPF入门教程系列二十三——DataGrid示例(三)
    WPF入门教程系列二十二——DataGrid示例(二)
    WPF入门教程系列二十一——DataGrid示例(一)
  • 原文地址:https://www.cnblogs.com/chaosheng/p/5315052.html
Copyright © 2020-2023  润新知