MySQL的事务日志
MySQL特性:WAL特性 Write Ahead Log 日志优先写
redo:重做
D:持久性:事务操作完成后需要将数据持久化在磁盘上 commit; rollback;
[root@db01 ~]# ll /app/mysql/data/
-rw-rw---- 1 mysql mysql 50331648 Aug 16 12:50 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Aug 7 12:02 ib_logfile1
innodb存储引擎的特性:
行级锁
热备份 mysqldump
事务
自动故障恢复 CSR
多版本并发控制 MVCC
mysql突然断电如何做到自动故障恢复 CSR
三种断电情况
A:redo 日志已经写完 commit命令已经记录到redo_log中 写入idb文件时断电
B:数据没有commti提交 但是redo_log中已经有数据变化的过程(mysql自动写入redo_log) 此时断电
C:数据没有commit提交 也没记录到redo_log中 此时断电
A:redo 日志已经写完 commit命令已经记录到redo_log中 写入idb文件时断电
详解:
再次启动 mysql 会将真实数据idb文件和 redo_log同时加载到内存中双方对比,模拟出数据变化 并重新写入到idb文件中
B:数据没有commti提交 但是redo_log中已经有数据变化的过程(mysql自动写入redo_log) 此时断电
C:数据没有commit提交 也没记录到redo_log中 此时断电
详解:
重启mysql 会将redo_log 和 undo_log 和 真实表数据文件idb文件 加载到内存
查询undo_log中有没有 数据原始值和提交的commit号记录
有 就模拟数据 写入redo_log 再写入idb文件
没有 就取消此次事务,回滚到记录的开始值
Redo Log 中记录了事务的所有更改,但是事务是否提交要看 COMMIT 标记是否存在。
Undo Log 保存了事务前的数据快照,用于在事务未提交时进行回滚操作。
在重启 MySQL 时,如果找到事务的 COMMIT 标记,MySQL 会重做事务的更改并写入 .ibd 文件;如果未找到,则使用 undo log 回滚到事务开始前的状态。