MySQL三大日志?
binlog(归档日志)、redo.log(重做日志) 和undo.log(回滚日志)
redo.log(重做日志):redo.log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。 比如 MySQL 实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo.log恢复数据,保证数据的持久性与完整性,redo.log两阶段提交,先写入redo.log状态置为prepare,然后写入binlog,然后将redo.log设置为commit状态。
binlog(归档日志):MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性binlog 日志有三种格式:
- statement:原始的sql语句,优点:占用空间小,缺点,执行的时机不通sql语句的值可能不同,例如time = now()
- row:包含具体数据的sql语句,例如会把now()替换成具体时间,优点:执行时sql语句值确定,缺点:占用空间大
- mixed:mysql自己判断,如果值不会变化,就用statement格式,否则用row格式
undo.log(回滚日志):当发生异常时,从undo.log中将数据恢复成原来的样子,mysql的MVCC依赖隐藏字段,read view和undo.log实现.
三大日志总结?
MySQL InnoDB 引擎使用 redo.log(重做日志) 保证事务的持久性。
使用 undo.log(回滚日志) 来保证事务的原子性。
MySQL数据库的数据备份、主备、主主、主从都离不开bin.log,需要依靠bin.log来同步数据,保证数据一致性。