mysql 备份恢复
2020-03-23 本文已影响0人
oasis_m
声明:所有文章只作为学习笔记用,转载非原创
https://www.cnblogs.com/tongxiaoda/p/8507688.html
MySQL:数据库宕机以后恢复的过程?如何保证事务的ACID特性?
https://www.zhihu.com/question/304967417/answer/554014306
REDO 为了重做对数据页(page)更改保存的信息,用于恢复
UNDO 为了撤销对数据记录(tuple)更改保存的信息,用于回滚事务
LSN(Log Sequence NO) 日志号,一个递增的64位整数,一个LSN表示一个(redo)Log结构。
CHECKPOINT表示一个时间点,在CHECKPOINT LSN之前的更改都已经保存到了持久存储。恢复时只需从最后一个CHECKPOINT LSN开始。
问题
问题一、redo是数据库日志,主要是对页面(PAGE)的修改信息;undo是事务日志,记录的是对记录(TUPLE)的变更,是更高一层的抽象。崩溃发生前一刻,许多对数据库的写入还没有被持久化了页面上,这时就需要靠redo恢复到崩溃发生前的瞬间。数据库恢复完成后,数据库可能发现有一些正在运行中的事务,事务的上下文都已经丢失了,要对这些事务回滚,这时就需要undo来恢复记录原来的值。
问题二、undo是一条记录被更新之前写入的,“写undo”这个操作,本身也是对页面的修改,也会有对应的redo。而redo每一次写页面都会记。
问题三、页面是分槽页(slot-page)结构,整体上看存储结构就是页面->区->段三层结构。redo是物理逻辑日志,undo是逻辑日志,概念上是这样的。undo也作为MVCC的版本链,一个undo就是前版本和后版本之前的差异。
redo log是为了持久化数据,在数据还没从内存刷新到磁盘时,如果发生故障,可读取该日志持久化到磁盘。
binlog 是为了复制和恢复数据的,即Mysql从服务器可以读取主服务器的binlog复制数据,数据库数据丢失,也可以读取binlog恢复
undo log是为了保证原子性的。
Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。
redo undo
https://cloud.tencent.com/developer/article/1527179
https://www.linuxidc.com/Linux/2018-01/150614.htm
https://baijiahao.baidu.com/s?id=1654809273831660358&wfr=spider&for=pc
https://www.linuxidc.com/Linux/2018-01/150614.htm