1 引言
mysql 日志可分为一下集中
- 错误日志(error log):对mysql的启动、运行、关闭过程中产生的错误、警告或者甚至正确信息
- 二进制文件(binlog):记录所有对mysql的写操作语句,有statements和row模式
- 慢查询日志 (slow query log):记录运行时间超过指定或者默认时间的sql
- 查询日志(log):记录所有对mysql的数据库请求信息
- 重做日记(redo log):用来实现事务的持久性
- undo log:用来实现事务的回滚
本篇文章主要介绍事务的提交过程中用到的redo log和binlog
2 sql 语句的执行过程
一个sql的全过程如下:
3 redo log和binlog 写入流程图
(1)(3) 称为事务的两阶段提交
整个流程称之为WAL技术,即write ahead logging技术
3.1 redo log
redo 记录的是物理级别的修改,也就是对应的数据页修改
redo 可分为四段,两个指针,其中一个write pos 写指针,另外一个check point 指针。
- write pos 指针负责写数据到check point 和write pos之间的空间。
- check point 负责把数据写入存储引擎中,并擦除write pos 和check point中间的数据
3.2 binlog
binlog 记录的是数据库的逻辑级别的修改
可对应两种形式:
- statement 记录sql形式
- row 记录两条记录,一条是数据修改前的样子,一条是数据修改后的样子
综上 redo log+ binlog 做数据的恢复
binlog 做数据备份
4 数据恢复
综上redo log和binlog 保证数据库crash-safe。