Mysql的事务日志

Mysql的事务特性(原子性,一致性,隔离性,持久性)

事务的执行依靠日志,事务执行时,日志先执行

事务提交的流程

提交事务
日志刷盘
数据刷盘
写cpk(数据校验)

事务提交的时候。会有两个日志文件

redo 重做日志 

   记录我们提交的事务,事务提交后,假如断电了,没有来的及写入磁盘,mysql 重启就会执行redo log

undo 回滚日志

  异常,错误,手动回滚写入

  回滚日志会写入一条相反的语句到日志  update/相反的update ,insert 写入一条delete等

注:事务如果没有提交commit ,就会等待,超出事务最大执行时间,就会异常。事务执行完毕以后,mysql不会再去执行undo(回滚日志)

事务开启的时候,我们进行数据库操作,首先会创建一个日志文件,会记录该事务一个lns序列号,当执行事务的时候,会往innodb_log_bufferri日志缓存区插入事务日志(redo),当事务提交时会将日志缓存区里面的事务日志刷入磁盘,这个动作主要有innodb_flush_log_at_trx_commit来进行控制

使用事务也会影响性能:控制提交时间

日志写入时间可以通过innodb_flush_log_at_trx_commit 函数来进行设置 0   1    2 三个值

参数mysql内默认为1 

0 代表事务提交以后,隔一秒写入缓存日志内部,在隔一秒写入磁盘文件  。开销小,容易出现数据丢失,比如忽然断电,数据没有写入磁盘,服务器重启后无法进行回滚日志进行数据恢复

1 代表实时写入,直接写入日志与磁盘,开销大,数据不会出现丢失的情况

2 事务提交以后,直接写入缓存日志,再隔一秒写入磁盘文件,折中方案

 

原文地址:https://www.cnblogs.com/bkhdd/p/15262008.html