铁匠 铁匠
首页
收藏
java
架构之路
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
链接
  • 分类
  • 标签
  • 归档

专注、不予评判地关注当下
首页
收藏
java
架构之路
常用算法
  • Java
  • nginx
  • 系统运维
  • 系统安全
  • mysql
  • redis
参考文档
关于
链接
  • 分类
  • 标签
  • 归档
  • mysql

    • MySQL-InnoDB 存储引擎概述
    • MySql 索引
    • MySql 事务
    • MySql 日志系统(WAL)
      • redo log - 重做日志
      • binlog - 归档日志
      • 两阶段提交
    • MySql order by 的执行过程与优化
    • MySQL 性能分析与常见性能问题总结
    • mysql推荐使用规范
    • MySQL 常用配置整理
    • mysql常用命令整理
    • mycli-强大的MySQL命令行客户端
  • redis

  • 数据库
  • mysql
FengJianxin
2019-11-10
目录

MySql 日志系统(WAL)

# redo log - 重做日志

redo log 用于记录数据的改动,数据更新时(insert、delete、update)会先记录到 redo log,然后再更新内存数据,写完 redo log 就可以给客户端返回数据更新完成了。redo log 会在系统空闲或者 redo log 文件写满时,将数据更新到磁盘并在 redo log 中删除对应的记录。整个过程称为 WAL(Write Ahead Logging) 技术。

作用:

  1. 避免数据写入时的频繁IO操作(整个数据库操作中IO操作是最耗时的)
  2. 在系统崩溃时恢复数据(将数据刷到磁盘或者回滚数据)- crash-safe

redo log 是 InnoDB 特有的日志文件,属于引擎层。文件大小和数量固定,可以通过my.conf修改

# redo log 文件路径
innodb_log_group_home_dir

# redo log 文件大小
innodb_log_file_size 

# redo log 文件的数量
innodb_log_files_in_group
1
2
3
4
5
6
7
8
(图片来自网络)
  • write pos 当前数据写到的位置
  • check point 当前数据擦除到的位置

redo log 会记录每次写数据和擦除数据的位置,两个位置之间的空隙就是可以写入数据的空间。

官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-redo-log.html (opens new window)

# binlog - 归档日志

binlog 在 server 层,无论是使用哪个引擎,都会有 binlog,binlog 用于记录数据库的归档数据,通常数据库备份就是备份 binlog,通常用来做数据库恢复,例如数据库崩溃恢复、搭建从库,都可以使用 binlog 来恢复和同步数据。

binlog 有两种格式

  • statement: 记录 sql 语句
  • row: 记录行内容

# 两阶段提交

数据更新过程

  1. 从内存(或者)中读取数据页
  2. 执行数据更新
  3. 将新数据写入内存
  4. 写如 redolog ,状态设置为 prepare
  5. 写如 binlog
  6. 提交事务,状态设置为 commit
  7. 数据写入完成

两阶段提交可以保证 MySql 的 crash-safe 能能力,假如 redolog prepare 和 binlog 写入成功时,数据库启动后会继续将 redolog commit;假如redolog prepare 写入成功,binlog 写入失败,数据库启动后会把 redolog 回滚。

#mysql
MySql 事务
MySql order by 的执行过程与优化

← MySql 事务 MySql order by 的执行过程与优化→

最近更新
01
策略模式
01-09
02
模板方法
01-06
03
观察者模式
01-06
更多文章>
Theme by Vdoing | Copyright © 2016-2023 铁匠 | 粤ICP备15021633号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式