MySQL 日志记录

前言

最近本身在学习MySQL基础方面的知识,差很少学习的也有一周多的时间了,进度的话也不是很快。学习的收有个问题,学过的知识很快的就忘记了,这怎么得了,必须想个办法。数据库

一开始是把看到的文章截图,以为有用的地方截个屏发到微信上,有时间能够看一下,结果呢,你是知道的,确定是没有看了,不只没有看当天学习的知识,就连之前学习的也忘记的一干二净。

后来想到一个比较鸡贼的办法,抄比较优质的留言,把它们当作本身的学习心得,试事后感受还能够,有些我不理解的地方,看了以后会有点转机,不想之前那么晦涩难懂了。这么骚操做以后,遇到一个新的问题,若是留言没有涉及到的内容我就不知道,好比每次课后习题我就不会作微信

我以为本身在学习方法上有很大的问题,若是用一句话来总结,那就是,一看就会,一问旧懵。知识很大层面上仍是停留在我知道这个层面,若是运用这些知识,把这些知识点用到工做生活中是不够的,我也知道一蹴而就的事情是不太可能办到的,学习是一件按部就班的事。数据结构

这让我忽然想到以前在学习数据结构的时候,每学习新的东西,我都会写一篇文章记录下来,学了什么,有什么感悟,记下来,这在之后回过头来看这些知识点会特别有感触,你会发现你容易就想到这些知识,这比你从新去看读书勾画的知识点要好一些,由于这是用你本身的话说出来的,有很大的不一样

言归正传

说了这么多回到今天的主题内容,今天要回顾总结的知识点是MySQL日志系统,这块的内容若是要展开见是很复杂的,本身的能力也讲不了很深刻,仍是以学习教材为基础,在此基础上结合评论区比较优质的留言,来探讨这期学习内容,废话说的有点多了,咱们如今正式开始学习

怎么提及这期的内容呢?是一个比较棘手的事情,单单拿出来说以为有点生硬,展开了讲又不会,真的很烦人,谁让你之前很差好读书的,这下惨了吧,后悔了吧3d

redo log(重作日志)

MySQL中的日志主要涉及到redo log 日志和binlog日志,稍后讲解binlog日志日志

在讲解redo log日志以前先问一个问题,为何会有redo log日志呢?excel

在说为何前,我先讲一个发生在我身上的事情,这个件事情大体是这样的。刚毕业那会儿我在一件天猫店铺上班,我主要负责的工做是打包快递,发快递,和快递公司对接,快递费用结算。天天快到下班前就有几家快递公司收快递,这些快递费用不是立刻结清,每月结算一次,可是天天产生的费用怎么结算呢,是那个本子急着嘛,不太可能,一开始我也不知道快递费用是多少,而是快递小哥根据收货地点,货物重量来结算的,一个月下来快递也有几千单,节假日有上万单,这可怎么好code

那我是如何处理计算天天的快递费用的呢,并统计和快递公司月结一次。每一个快递单我都会保留着,这上面不只有收发信息,还有这件快递的费用,每到发完快递的时候,我都将全部的快递费用记录到excel表中,到了快月结快递费用的时候,就把上次结算到如今的快递算一下,总共好多单,好多费用。这样我不只能够和快递公司结算帐目,还能够回头查看每单的费用,即使快递公司这个月不结算费用,也能够在下个月结算cdn

我说了这么多和redo log有什么关系嘛,有的,那就是MySQL每次产生的记录不会写入到磁盘中,而是先记录在redo log中,在不忙的时候再刷入到磁盘blog

若是每一次的更新操做都将写进磁盘,而后磁盘再找到那条记录进行过更新,整个I/O操做成本是很高的。为了不频繁的I/O操做,将记录写入到日志,而后再持久化到磁盘,这就是预写式日志WAL,全称Write Ahead Logging

具体来讲是这样的,当有一条记录须要更新的时候,InnoDB引擎会将记录写进redo log中,这条记录更新就算完成了,在系统比较空闲的时候InnoDB会把redo log中的记录存储到磁盘

那么Innodb是如何写把这条记录写入到redo log中的呢? 以及记录了什么到redo log中呢? 下面咱们来一探究竟

在说怎么把记录写到redo log前,先说下redo log的一些特性,为后面的内容作铺垫,InnoDB 中的redo log是有固定大小,好比每一个文件1GB,4个文件,共有4GB,若是4GB的空间沾满了就从头开始写,因此redo log也叫作重作日志, 写满了要把以前的记录存储到磁盘中

上图中的write pos表示的是当前记录的位置,一边写一边日后移动,写到3号文件末尾移到0号文件开头写。 checkpoint 是当前要查处的位置,也会一遍擦除记录一遍日后移动,擦除的记录要写进磁盘

若是write pos 追上了checkpoin表示redo log 写满了,这个时候须要停下来,擦除一些记录,把checkpoint推 进一下,擦除 的记录得写进数据文件

write pos 到3号文件末尾 ,以及0号文件开头到checkpoint这两部分是空闲的,能够用来写新的记录。

有了redo log ,即使数据库异常重启,也不会致使数据丢失,这些记录在redo log中,只要重启数据库这些记录就会存储到磁盘中,具备这样的能力称为crash-safe

redo log也叫作物理日志,记录的是在某个数据页上作了什么改动,会将redo log中的记录持久化到磁盘上。redo log上到底记录的是什么呢,具体我也不知道,能够先这么理解,redo log记录的是在某个数据页上作了什么修改

其实redo log往深刻讲是很复杂的,我这里只说了redo log的皮毛,也只知道一点皮毛😁。有这种认识是很好的, 不想之前,以为这个学了,我就懂了吧,我就不用在学习了哦,我真实太有才了,这种沙雕想法。

binlog (归档日志)

相关文章
相关标签/搜索