00:00
好,同学们,咱们接着呢往下讲啊,关于这个mal高级篇的话呢,我们一共呢,是分成了四个小的篇章,然后呢,我们已经讲完三个篇章了,哎,还剩最后的一个篇章叫做呃,日志与备份篇,那么这个小的篇章里边呢,对应的有三个章,就是第17 18 19这三个章,那么相较于我们前面的三个篇章来讲的话呢,这三章呢,难度呢,其实就比较低一些了啊,就比较低一些了,好,那我们就一章一章来学习,首先来看这个第17章,叫做其他数据库日志。那既然我们提到其他的,就意味着前面我们谈到过日志对吧,我们在讲这个数据库事物的时候呢,讲过锐度日志和安度日志啊,因为呢,他们是跟事物的耦合度比较高的啊,那所以呢,我们在前面呢,就把这两种日志呢就讲完了啊,那么剩下这个日志呢,就是我们哎这一章呢,给大家呢要讲解的内容。好,那么日志的话呢,首先这里边儿呢,我们提到了一个具体的场景是吧,通过这种场景呢,我们去体会一下日志的一个作用啊,对于这个线上的运行的这个数据,呃,数据库系系统是吧,突然呢就发生这个宕机了啊,那么出现宕机以后的话呢,我们主要呢,就要解决是什么问题造成的啊,也有可能是我们内部的这个色控的一些错误写法,导致整个服务器资源比如说有限了啊,最后呢,出现宕机这样的问题。
01:09
对吧?好,那这时候我们就需要呢,去定位这个问题,那么我们就要考虑这个日志啊,那么到底看哪种日志啊,哎,咱们说这里边这个日志呢,还有很多种对吧?很多种,那你得呢,针对你现在的问题呢,去使用合适的日志啊,你比如说我们这时候呢,就查看这个叫错误日志啊,这个错误日志里边呢,就记录了整个我们MYSQL数据库服务器啊,或者叫这个实例啊,他从一开始呢这个啊运行啊,到你最后这块呢,出现宕机了,整个过程当中啊,出现了一些错误啊,警告啊这样一些信息。那我们呢,通过这个错误日呢,就能够定位到,哎,我们这个宕机呢,出现的原因是什么,然后接着呢,去解决这个问题就可以了。对吧?啊,那么除了这个呃日志有这样的作用之外呢,我们说还有其他的什么作用呢?啊,比如说我们有些日志呢,可以在这个数据复制,数据恢复方面呢,诶起到一定的作用,那比如说我们像这个叫blog这个日志啊,也称为叫二进制日志,对吧?还有呢,是适合于我们去操作或者叫审计啊整个呢,我们运行的一段时间之内,到底呢,都有哪些呃操作行为啊,那这时候呢,其实我们也可以参照呢,比如说像这个通用查询日啊这样的一个功能。
02:15
啊来确保等等等这样的一些作用是吧?啊应该说呢,这个日志呢,在整个我们啊数据库的这个运行过程当中啊,包括我们作为这个啊,不管你是数据库开发成员也好啊,运营的角色也好,还是我们这个开发的角色也好啊日志呢,其实都是不可或缺的一个非常好用的工具啊,说千万呢,不要小看日志啊,尤其呢,我们说这个呃,数据库的这个经验比较多的这个老鸟是吧?诶它这个非常善于呢去使用日志,而且从日志当中呢,是能够很快的定位发现问题的啊这呢也是一种能力啊,也是一种能力啊,那么这个MY8.0的官网当中,关于这个呃日志的一个介绍呢,是在这个链接当中啊,这块呢,大家直接点开呢去查阅就可以了啊,还是那个意思啊,如果大家呢,是最初来学习日志的话呢,没有必要呢看官网了啊,在我们遇到一些问题的时候呢,解决不了了啊,或者说呢,你去查看一些这个不同人的这个解释方式呢,你发现他们彼此之间有矛盾的点,那这时候我们去官网当中去找这个,诶这个权威的答案啊,这呢是我们平常用到官网的一个场景啊。
03:15
好,那么我们在讲这个具体的日志之前呢,我们首先对于日志呢,来一个概述啊,来一个概述整体上啊,除去咱们前面讲的这两种,呃,事物相关的日志之外呢,我们还有这样的几种啊,分别对应的叫二进日志啊,错误日志,通用查询日志和慢查询日志,然后在这个8.0的时候呢,又引入了两种叫中继日志和数据定义语句的日志啊,数据定义语句啊,这个一看呢就明白是吧。好,那么一共呢,是有这么多种日志啊,那么我们接下来的话呢,相当于对这六种日志的话呢,进行一个概述啊,那我们概述之前呢,大家你先想一想,呃,如果呢,嗯,让你去泛泛的去想一想,或者叫设计一款数据库方面的一个日志,你觉得你想设计一个什么样的日志呢?对吧?诶我觉得大部分人呢,可能首先想到就是我们这个数据库实力呢,在整个的啊,运行的过程当中啊,他都做过什么事啊,我想把它记录一下啊,这个呢,我觉得如果大家想可能会优先想到这样一个场景,也是合情合理的,对吧?那么这种日志的话呢,其实就叫做通用查询日志。
04:15
诶就叫做通用查询值,它会记录所有的连接的起始时间和终止时间,以及呢,连接发送给数据库服务器的所有的指令啊,那对于我们整个呢,去复原我们的实际这种场景,去发现问题,包括呢,刚才提到的这种审计啊,它都会提供很大的帮助啊,那么我们也能想到就是这个,如果通用查询日我们打开的话呢,呃,这个无时不刻的其实都在生成这样的一些日志的信息,这个文件的话呢,是不是定期的,你得给他诶保存起来是吧?诶给它备份的保存下来。啊,然后呢,这个归档是吧,否则的话呢,这个文件呢,它会越来越大啊。啊,这呢是我们能够想到的一种,那还有呢,这个就是我们前边呢讲到过的啊,叫慢查询日志啊,这个呢,是用于我们前面提到关于这个SQL优化的啊,我们呢,可以去做一个设置啊,说超过指定的叫long query time这样的,这个呃,执行时间的这样的语句呢,我们都会记录下来,那那么我们就可以看一下说呃,为什么这些语句呢,这么慢,我们接下来呢,是不是使用explain啊等等一些工具呢,去进行分析啊,去进行优化是吧,就可以了,这呢叫慢查询日志啊,那么今天呢,咱们讲这个日志的时候呢,关于慢查询日志呢,咱们就不讲了啊,前面咱们在这个。
05:25
诶,这个性能分析工具里边呢,呃,详细的已经说过了是吧?诶如何呢,去设置这个参数啊,都进经讲了啊,那么这个错误认识的话呢,刚才我们也提到了啊,因为有一个具体它的应用场景啊,那它的这个作用呢,顾名思义啊,错误日志嘛,是吧,来便于我们去发现这个错误的问题的哈。然后下边这个呢,叫二进制,二进制日志啊,这个呢,翻译成翻译成英文了,应该是还原成英文啊,叫做barylo啊,我也简称了叫blog,就是我们所谓的叫二进制日志了,哎,它呢,注意是记录所有更改数据的语句。啊,更改注意那就意味着没有查询啊,他把我们整个针对于这个数据库里边啊,你做的增删改的这些操作,我们都会去记录下来,当然不管增删改啊,包括你去改表结构啊等等都会记录下来,那我们记得它的作用啊,有什么呀,实际上呢,它有两个大的作用啊,第一个的话呢,就是我们提到了,既然你把这些更改的情况都记录下来了。
06:18
哎,其实这里边呢,呃,具体的记录的是不是一定是语句呢,这个也得看我们这个日志,它的这个设置的格式啊,诶它可以记录这个语句也可以呢,记录这到底是哪些行发生变化了啊,就是它有不同的这个格式啊。库存的模式啊,我们先这样泛泛的一说啊,既然呢,他把这些变化呢,都记录下来了啊,那么相当于我们是不是就可以呢,进行数据的一个恢复啊,啊比如我们这个服务器呢,相当于出现故障了,这个数据呢,出现一些损失是吧,我们怎么恢复呢?诶你可以考虑使用这个二进制的日志。那一说到这儿呢,大家可能会想到说,诶,我们前面讲事物的时候呢,提到过是不是叫瑞动日志保证我们这个数据的一个持久化是吧?哎,似乎呢,好像有一些共同的作用啊,咱们在下面讲这个二进制日志的时候呢,也会提到他俩的一个对比,你看我这都给你想到了是吧。
07:03
啊,那正常的在面试交流当中呢,你也可以去谈一谈这个问题,或者呢,我要是面试官我也去问你这个问题是吧,看你是不是理解的比较透彻一些,是不是真的能分清楚啊这样。好,那么除了我们做这个数据的一个恢复之外呢,还可以做什么呢?诶,它还有一个非常重要的场景,也是我们下一章呢重点给大家讲的就是主从服务器之间的一个数据同步。啊主从服务器之间的一个数据同步,呃,那么这个呃,只要提到这个需求的话呢,我们还得在从服务器上呢,需要对应的一个日志叫做中继日志。啊,那就是这哥俩啊,主要呢,体现的就是主从复制啊,那在这儿甘说呢,可能大家呢,就不太好理解了啊,那我们先简单的打开一下这个下一章,哎,咱把这个图呢,稍微的看一下就行。啊,我们说呢,在这个MYSQL多台服务器的这种场景下呢,我们有这个主从主服务器和这个从服务器是吧,实现这个叫主从的一个啊读写分离啊主服务器呢,我们负责这个血的几个行为啊,这个从服器呢,我们负责这个主要的叫读的这个行为啊,你要读的情况多呢,你是不是还可以有多台这个读的这个slave是吧,来冲击好那么既然呢主根呃。
08:06
写跟读呢分开了啊,那你一定要保证他们的数据得是一致的,那怎么办呢?诶凡是呢,我们针对master这块呢,写的这些行为呢,刚才我们说了更改的操作,我们都让他记录在这个哎二进制的日志当中,那么我们这个从服务器呢,诶他呢就通过I多这种方式呢,去读我们这个I blo这个日志中的数据,然后读到这个从级以后呢,注意这时候呢,我们要把它保存在对应的文件中啊,这个文件呢,叫做lo啊,就是我们刚才说的叫中继日志了。哎,它叫做这个终极日志,哎,你把这个数据呢,读到这个终极日志当中,然后呢,诶我们再去读这个终极日志啊,终极日志呢,再把你这个从服务器上这个数据呢做一个恢复啊,那么读的时候呢,我们就是诶这样子去读读你这块的表,然后呢,写的时候呢,就写诶master这里边的这个表啊,那一写的话呢,既然你是写操作,是不是就一定要会到这儿,然后这儿呢,是不是就到这儿,哎,当然呢,有同学可能会想说,这中间呢,会不会有一些延迟的问题啊,这个我们到后边时候再说啊。
09:00
好,那么刚才呢,这个主从复制当中啊,就用到了这个二进制和这个终极日志OK。然后剩下一个呢,叫数据定义语句的日志啊,这个一看呢,就很明白了啊,就是针对我们这个数据定义语句的啊,这个语言操作行,嗯,这呢我们就说到这儿,然后的话呢,这些日志当中啊,你说哪个是最重要的呢?其实这个也很难说,因为它的作用呢是不一样的,哎,作用呢,要相同的话呢,我们说谁更重要一些是吧?诶各自有各自的作用啊,当然这里边呢,我们稍微提到一点特别之处呢,就是这个二进制制。啊,你看这叫二进制日志,那很显然的话呢,我们要是直接读的话呢,是不现实的,所以呢,这个文件呢,我们不能说使用一个记事本啊等等打开看这个不靠谱啊,那么除了他叫二进制之外呢,别人呢,就没有叫二进制了啊,那别人呢,如果是二进制的话呢,那你这个叫二进制就容易有歧义是吧,既然他这样叫了,那其实就意味着就其他的这些日志啊,它其实都是非二进制啊,我们可以理解成就是这种文本日志的。啊,那既然是文本认知道,那其实我们就可以呢,直接呢通过像记事本啊或我们这个Linux里边呢,我们通过VI呢或M呢这样的工具呢,咱们就直接呢可以打开查看了啊,这个比较方便一些啊,而且呢,默认这些日志呢,都存放在我们这个MYSQL呢数据目录当中啊,外点立点MYSQ下是吧。
10:13
好,那就说到这儿,然后下边呢,我们说一下叫日志的一个弊端啊,哎,同学说老师你怎么第一次见你看不谈好处就直接说弊端呢。啊,好处还用说吗?啊,那我们有这些日志呢,每个日志的作用不一样,那不就是它的好处吗?对吧?啊,比如说错误日志啊,好处是什么呢?啊,那你要是发生错误的话,那我们是不是可以有个地儿呢,去看一看到底什么错误啊,找点这个依据,就跟医生去给你看病一样,你让他这个啊就就咱就说古代的话呢,虽然说这个医疗设备没有那么强,那也讲究望闻问切是吧?啊,你得有一些依照的东西啊,你不能这个空口无凭,那就是成骗人了。啊,那这就是他们的好处嘛,哎,功能不一样是吧?好,那么这个弊端是什么呀。啊,弊端啊,第一个就提到说日志啊,它会降低MYSQL数据库的一个性能啊,这是很显然的问题啊,啊你比如我们这个数据库服务器,它就好比是一个运动员一样啊,这个跑得快,那就说明他的性能比较高啊,你正常来讲的话呢,他在这跑着,然后其他的人呢,是不是负责做一些记录啊等等的是吧?啊这个这个比赛的一个解说啊等等的,你现在让这个数据库服务器,他一边跑一边跑,还同时他自己呢去做一些记录啊,记录他整个跑的过程当中一些行为,你想他能跑快吗?
11:20
啊,肯定不现实是吧,诶所以呢,这个日日的这个出现呢,会降低我们MY数据服务器的性能啊,他要分一部分资源呢,去做这个日日的一个记录啊,啊那么第二点的话呢,说日志呢,它会占用大量的磁盘空间啊,那很显然的是吧,尤其呢,比如像我们这种通用查询日啊,查询日啊,你什么都记,而且呢,你还不给他去做一些归档啊,历史文件的一些存储,那你想想他在这个整个磁盘空间当中是不是就越占越多,甚至的话呢,它可能会超出我们本身数据库文件的一个存储空间。对吧,哎,数据文件没多大,但是你这块呢,哎,针对于我们这个数据库的操作呢,极其频繁啊,那你这个记录的日志就会多啊,有可能会超是吧,哎这个呢,就是我们谈到的主要的弊端。
12:00
好,那么对于这个日志的话呢,我们首先呢有个概述,然后接下来的话呢,我们就分别呢,去介绍这里边儿的常见的几种日志。
我来说两句