binlog
二进制日志是mysql-server层的,主要是作主从复制,时间点恢复使用
redo log
重作日志是InnoDB存储引擎层的,用来保证事务安全
undo log
回滚日志保存了事务发生以前的数据的一个版本,能够用于回滚,同时能够提供多版本并发控制下的读(MVCC),也即非锁定读mysql
为了保证master和slave
的数据一致性,则binlog和redo log保持一致
不然当binlog写完未fsync,主库crash了,备库却执行了,数据会不一致
binlog
是mysql内部实现二阶段提交的协调者
为每一个事务分配一个XID
一阶段:
事务状态为prepare
,redo log和undo log已经记录了对应的日志
二阶段:sql
binlog
完成write和fsync
后,成功,事务必定提交了,不然回滚当出现crash等问题,经过扫描binlog
中全部的xid,告知innodb,innodb回滚其它事务安全
若是不一致,会致使数据不一致
BLGC(Binary Log Group Commit) 解决串行prepare_commit_mutex的问题
引入队列解决,并发
redo log
在事务没有提交前,每个修改操做都会记录变动后的数据,保存的是物理日志->数据
防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重作,从而达到事务的持久性这一特性.
redo log只是先写入Innodb_log_buffer,定时fsync到磁盘spa
binlog
只会在日志提交后,一次性记录执行过的事务中的sql语句以及其反向sql(做为回滚用),保存的是逻辑日志->执行的sql语句
undo log
事务开始以前,将当前版本生成undo log,undo 也会产生 redo 来保证undo log的可靠性,保存的是逻辑日志->数据前一个版本3d
redo log直接恢复数据
的效率 高于 基于binglog sql语句
恢复
做者:哓晓的故事
连接:https://www.jianshu.com/p/090087c22820
来源:简书
简书著做权归做者全部,任何形式的转载都请联系做者得到受权并注明出处。日志