undo log、redo log和bin log

undo log

1.undo log是一种用于撤销回退的日志,MYSQL会记录更新前的数据到undo log日志文件里面,当事务回滚或者数据库崩溃时,可以用undo log进行回退
2.undo log在事务开始前产生,事务提交时并不会直接删除,而是会将对应的undo log放入删除列表中,后台有专门的线程purge thread进行回收处理

undo log作用

1.提供回滚操作,undo log是逻辑日志,可以认为delete一条记录时,会对应记录一条insert记录。
2.提供多版本控制MVCC,当读取的某一行被其它事务锁定时,它可以从undo log中分析该行记录以前的数据版本是怎么样的,从而让用户能够读取到当前事务操作之前的数据(快照读)

redo log

1.innoDB对数据的更新,是先将更新记录写入redo log日志,然后会在系统空闲的时候,或者是按照设定的更新策略再将日志中的内容更新到磁盘中,这就是所谓的预写式技术,这种技术大大减少io操作频率,提升数据刷新的效率。
2.redo log包括两部分,一个是内存中的日志缓冲redo log buffer,另一个是磁盘上的日志文件 redo log file

redo log的作用

mysql每执行一条DML语句,先将记录写入redo log buffer,后续某个时间点再一次性将多个操作记录写到redolog file,当故障发生致使内存数据丢失后,innodb会在重启时经过重放redo,将Page恢复到崩溃之前的状态,通过Redo log可以实现事务的持久性

bin log

1.bin log是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,更改数据库表和更改内容的SQL语句都会记录到binlog里,但是不会记录查询操作
2.bin log 是在mysql的Server层实现的
3.bin log为逻辑日志,记录的是SQL语句的原始逻辑,不限制大小,追加写入,不会覆盖以前的日志,默认情况下binlog日志是二进制格式的,不能使用查看文本工具的命令,比如cat、vi等查看,而使用mysqlbinlog查看

bin log的作用

1.主从复制,在主库中开启bin log功能,这样主库就可以把binlog传递给从库,从库拿到bin log实现数据恢复达到主从数据一致性
2.数据恢复,通过mysqlbinlog工具来恢复数据

bin log与redo log的区别

1.redo log是InnoDB引擎特有的;bin log是MYSQL的Server层实现的,所以引擎都可以使用。
2.redo log是物理日志,记录的是“在xx页上做了什么修改”,bin log是逻辑日志,记录的是对应的SQL语句
3.redo log是循环写的,空间会用完,需要write pos和check point搭配;binlog是追加写,写到一定大小会切换到下一个,并不会覆盖以前的日志
4.redo log有crash-safe能力而bin log没有

CrashSafe

CrashSafe 指MYSQL服务器宕机重启后,能够保证
1.所有已经提交的事务数据仍然存在
2.所有没有提交的数据自动回滚

你可能感兴趣的:(面试题,数据库)