一、持久性
依靠的是redo log,重做日志,记录的是事务提交时数据也的物理修改,是用来实现事务的持久性。
该日志文件由两部分组成,重做日志缓冲,(redo log buffer) 和重做日志文件(redo log file),前者是在内存中,后者是在磁盘中,当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘发生错误时,进行诗句恢复使用。
*脏页:用户在执行增删改时,操作的是内存结构中的Buffer pool中的页, MYSQL会在一定时间内将内存中的页刷新到磁盘来实现持久性,已经被修改但是还没刷新到磁盘中的页叫脏页。
*WAL:这种处理用到了WAL机制,先写日志,过一段时间再将内存缓冲区刷新到磁盘中
二、原子性
依靠的是undo log,回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚和MV6C(多版本并发控制)。
undo log和redo log记录物理日志不一样,它是逻辑日志。可以认为当delete-条记录时,undo log中会记录-条对应的insert记录,反之亦然,当update- 条记录时,它记录-条对应相反的update记录。当执行rollback时, 就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。
Undo log销毁: undo log在事务执行时产生,事务提交时,并不会立即删除undo log,因为这些日志可能还用于MVCC。
Undo log存储: undo log采用段的方式进行管理和记录,存放在前面介绍的rollback segment回滚段中,内部包含1024个undo log segment。