有多少种日志
innodb两种日志redo和undo。
日志的存放形式
1、 redo:在页修改的时候,先写到redo log buffer里面,然后写到redo log的文件系统缓存里面(fwrite),然后再同步到磁盘文件(fsync)。
2、 Undo:在MySQL5.5之前,undo只能存放在ibdata文件里面,5.6之后,可以通过设置innodb_undo_tablespaces 参数把 undo log 存放在 ibdata 之外。
事务是如何通过日志来实现的
1、 因为事务在修改页时,要先记undo,在记undo之前要记undo的redo,然后修改数据页,再记数据页修改的redo。 Redo (里面包括undo的修改)一定要比数据页先持久化到磁盘。
2、 当事务需要回滚时,因为有undo,可以把数据页回滚到前镜像的状态,崩溃恢复时,如果redo log中事务没有对应的commit记录,那么需要用undo把该事务的修改回滚到事务开始之前。
3、 如果有commit记录,就用redo前滚到该事务完成时并提交掉。
Was this helpful?
0 / 0