
事务ACID的实现
我们先来介绍一下事务ACID的实现:
原子性:通过undo log实现
一致性:通过undo log和redo log共同实现
隔离性:通过锁机制和undo log实现
持久性:redo log实现
Mysql日志类型
逻辑日志(存储了逻辑SQL修改语句)
物理日志(存储了数据被修改的值)

Redo Log(重做日志)
对数据进行修改时,先写入redo log,然后再更新到插入缓冲,保证数据不会因为宕机而丢失,保证持久性
当事务提交的时候会将redo log刷至磁盘持久化。
因为缓冲池每次刷脏页到磁盘是随机IO每次修改的数据是不确定的,且是以页为单位进行的,每次都要整页写入,所以整体速度比较慢,而redo log 是在页中追加,顺序IO并且每次都值写入修改的部分,IO量降低很多,速度较快
redo log由两部分组成:
redo log buffer
redo log file

Undo Log
作用保存了事务发生之前的数据版本,用于回滚(原子性)
提供了并发控制(MVCC)(隔离性)
undo log和redo log正好相反,undo log记录的是数据发生修改之前的信息,并且记录的是逻辑变化,比如要执行一个delete操作,那么undo log记录的就是一个insert操作,执行一个update操作,那么undo log记录的是一个反向的update操作。
保存了事务发生之前的数据版本,用于回滚(原子性)
提供了并发控制(MVCC)(隔离性)

隔离性原理
隔离性也就是事务内的查询不会查询到其他事务的修改,也就是事务之间互相隔离。
undo log被innoDB引擎用于了多版本并发控制。
innoDB通过undo log保存了已更改的行数据的旧版本的数据快照,这样undo log中的数据可以作为旧版本数据快照供其他事务读取,来达到一个隔离性的目的。

Binlog
主从复制:Mysql Replication在master端开启binlog,然后slave通过拉取复制master的binlog日志到salve,来完成主从同步复制。
数据恢复:生成binlog文件之后,我们可以通过mysqlbinlog工具恢复数据。
binlog的3种日志格式
ROW 格式
STATEMENT 格式
MIXED 格式

文章转载自两个菜鸟程序猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




