mysql日志系统

日志系统

redo log(重做日志)

  1. InnoDB引擎日志,redo log 保证数据库异常重启之前提交的记录不会丢失(crash-safe)

  2. 在一条更新语句进行执行的时候,InnoDB引擎会把更新记录写到 redo log 日志中,然后更新内存,此时算是语句执行完了,然后在空闲的时候或者是按照设定的更新策略将 redo log 中的内容更新到磁盘中,这里涉及到WAL即Write Ahead logging技术(先写日志再写磁盘)

  3. redo log 是物理日志,记录的是在某个数据页上做了什么修改

  4. redo log是循环写,空间固定会用完

binlog(归档日志)

  1. server层日志,记录了MySQL对数据库执行更改的所有操作,没有crash-safe能力

  2. binlog是逻辑日志,记录的是记录所有数据库表结构变更(CREATE、ALTER)以及表数据修改(INSERT、UPDATE、DELETE)的二进制日志

  3. binlog采用追加写的模式

  4. 用途:

  • 恢复:binlog日志恢复数据库数据

  • 复制:主库有一个log dump线程,将binlog传给从库,从库有两个线程,一个I/O线程,一个SQL线程,I/O线程读取主库传过来的binlog内容并写入到relay log,SQL线程从relay log里面读取内容,写入从库的数据库

  • 审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入攻击

binlog常见格式

format 定义 优点 缺点
statement 记录的是修改SQL语句 日志文件小,节约IO,提高性能 准确性差,有些语句的执行结果是依赖于上下文命令可能会导致主备不一致(delete带limit,很可能会出现主备数据不一致的情况)
row 记录的是每行实际数据的变更 准确性强,能准确复制数据的变更 日志文件大,较大的网络IO和磁盘IO
mixed statement和row模式的混合 准确性强,文件大小适中 有可能发生主从不一致问题

两段提交

  1. 保证数据库binlog状态和日志redo log恢复出来的数据库状态保持一致

  2. 两段提交: 写入redo log处于prepare阶段 –(A)- 写入bin log -(B)– 提交事务处于commit状态

    • 时刻A崩溃恢复: redo log未提交, bin log 未写,不会传到备库,这时事务会回滚

    • 时刻B崩溃恢复: 如果 redo log 事务完整有commit标识则直接提交,如果 redo log 事务只有完整的prepare,则判断对应事务 bin log 是否完整,“是”提交事务,”否“回滚事务

  3. bin log完整性判断:

    • statement格式最后有commit

    • row格式最有有一个XID event(redo log 和 bin log关联:有一个共同字段XID)

undo log

  1. undo log是逻辑日志,可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录

  2. undo log 作用

    • 提供回滚

    • 多个行版本控制(MVCC)


   转载规则


《mysql日志系统》 wangyixin-tom 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
mysql存储引擎 mysql存储引擎
innodb和myisiam区别Innodb引擎:支持数据库ACID事务。并且还提供了行级锁和外键。它的设计的目标就是处理大数据容量的数据库系统,InnoDB 适合频繁修改以及涉及到安全性较高的应用;。 MyIASM引擎:不提供事务的支持,
2021-04-11
下一篇 
mysql必知必会 mysql必知必会
架构server层 连接器:管理连接,权限验证 查询缓存 分析器:词法、语法解析 优化器:生成执行计划,索引选择 执行器:操作引擎,返回结果 存储引擎层 负责数据存储和提取,插件式,支持InnoDB、MyISAM多个存储引擎
2021-04-10
  目录