MySql日志概述

 存储引擎里用的是redo日志和undo日志,服务层用的是bin日志

Redo日志

意思就是在存日志时候,如果要存在磁盘,肯定需要开启io,每次都要开启关闭io,所以它每次都是先把日志放在内存,然后读取到磁盘,但有个问题,如果突然断电了,日志难道要丢失吗?它把日志存在内存时候,干了这么一件事。。。

在每次把日志存放在内存时候,经过log buffer,它是用户的某一个内存空间,里面分redo和undo,然后经过user space和kernel space,user space是用户控制的,kernel space是内核控制的,也就是经过OS buffer操作系统,就是从一块缓存拷贝到另一块缓存,这个速度肯定非常快,并不是直接从内存写到磁盘空间。然后在OS buffer会经过fsync()方法,写入到磁盘。

所以在每次如果真的断电的话,redo日志会把日志恢复,避免数据丢失。日志每次也不是说有一个就赶紧存到磁盘,这样效率很低,它会有一个缓存机制,有一定数据量一并写入磁盘。

执行顺序图:

 Undo日志

 redo表示在每次数据写到磁盘时候保证原始性,undo表示要么成功要么失败

Bin日志

binlog就是归档日志

之前早时候携程的数据库丢失数据了,有的说被黑客攻击了,有的说自己员工不小心删除了,不管怎么回事,这样的结果最终想要的是恢复数据

binlog可以恢复数据,就算数据丢了,如果binlog日志文件不丢,就能恢复数据!

注意:如果你的binlog没开启的话,默认是不开启的。

命令行输入:show variables like '%log_%':      然后回车

可以看到binlog是关闭的,如果要开启需要设置成ON

 Redo log两阶段提交

 

posted @ 2021-01-30 22:58  aBiu--  阅读(68)  评论(0编辑  收藏  举报