00:00
好了啊,在这个了解了什么是Maxwell之后呢,那咱们接下来就往下讲了,看一下我们一起来看一下这个Maxwell的一个工作原理。那还是那句话啊,要是要讲这个Maxwell的工作原理,那我们还得先看一看这个my circle的一个主动复制啊,相信很多小伙伴都已经玩过这个MYSQ的主动复制了,是吧?因为在公司里边啊,一般my circleql它是为了避免那个单点故障,它都有一个两台或者两台机以上,那我这多台MYSQL它肯定是一个机群,就是主从复制集群是吧?为了实现那个动性分离啊,像这些我就不再啰嗦了,大家应该都玩过啊,那我们看一下这个my circlel的主从复制它是一个什么原理。啊,其实啊,这个原理也比较简单啊,首先在我这个my circle的主从复制集群里边,它肯定有两个角色,有一台机器是master,剩下的都是s slave,一台主机,剩下都是从机,那咱们这一块啊,一旦我的主机的主库如果说有这个数据改变了。那我就需要提前开启我这个主库的一个blog的设置,那我这个数据的改变就会写到我这个二进制文件,就是那个blog日志中。
01:08
那你一旦你这个主库生成了对应的blog,那我这个slave从进会怎么样?S slave slave的从库会向咱们这个主库发送一个复制协议。然后呢,他会从这个主库的宾勒G日志里边,而拷贝到他自己的一个中继日志,然后再读取自己的中继日志,然后模仿了主库,把这个数据咱们给他同步一下,就是你做什么动动作,我会模仿你,我也做对应的动作,那这样一来就保证了我的从库跟我的这个主库,我的这个数据永远是同步的啊就是这个图布图大概就长这个样子,咱们有一台主库,有一台从库,那我这个主库在在这个数据的更新过程中,无论是新增还是删除还是修改,反正只要有数据更新了,他就会把自己这个更新变化写到一个blo二进制文件中。当然啊,这个功能需要你自己开启一下,你需要设置这个my circle的一个参数,通过这个参数咱们打开这个my circle的blog。
02:07
那我这个主库一旦有了b blog,那我这个从库就会什么呀?就会这个通过一个IO线程读取,就是实时的读取你这个主库的这么一个b blog,读到哪呢?注意啊,他读过来之后,他并不会直接基于你的这个写数据,它会干嘛呀,他会把这个数据读过来以后,写到自己这个中继日志里边,然后呢,我这个存库就根据我自己的这个。终极日制来这个做这个数据的还原,那从从而啊,就保证了咱们这个从库跟咱们这个主库它的一个数据同步啊,这种机制就是咱们那个所谓的my circle的主从复制啊,这种机制也比较简单,大家都玩过好吧,哎,那我们接下来明白了这个以后呢,那我们就明白了,那mal是什么原理啊,那咱们这个Maxwell为了能够实时的抓取咱们这个my circle的这么一个数据。
03:00
那咱们这个Maxwell说白了啊,他就模仿了自己这个主通风这种那个架构,就是我这个Maxwell会把自己伪装成我买circle的一台从库。啊,我会伪装成你的一台存库,那我既然是吧,我这个my well是你的一个存库了,那我就有读取你b log的这么一个权限了,那从而我就通过这个my circle的b blogg来实时的抓取你的这么一个数据的变化了,啊,无论你是新增也好,还是你是修改也好,还是你删除也好,我都能够获取到你这个数据的变化过程,因为你这个数据变化都存在了你的这个b log日志里边啊这个就是咱们Maxwell的一个公原理啊,Maxwell的公原理比较简单,就是把自己伪装成my circle的一个从库,然后以从库的身份假装从咱们这个my circle的主库,咱们做一个数据的复制啊,就是你是删除,那我这边就删除,那你是这个,那你是新增,那我就是新增,你是变化,我就变化啊,所以说通过这这么一个手段来实时的抓取咱们这个my circle的啊这么一个。
04:03
数率变化好吧,啊,那再往下,既然我们都聊到了这个blog,那我就再给大家简单详细的介绍一下这个my circle的blog啊,到底是个什么东西,好吧,啊,到底是什么是b blogg呢?就是my circle的一个二进制日志啊,可以说是咱们这个my circle的最重要的一个日志了,它记录了我我这个my circle所有的DD和这个DML啊,当然这个查询是没有的,因为咱们如果在这个从主库这一块你查询了一下,我这个数据没有任何变化啊,DDL数据的变化,DML数据的控制,好吧,就是无论你是新建表,新建库,还是新增数据,修改数据,删除数据,像类似的这种有数据的变化了,我都会把这些变化过程写到我这个blo里边里边去啊,并且它是以这个事件的形式来记录的。然后其中啊,还包含了这个语句所执行的消耗的时间,然后我这个my circle的二点二天日志,它是一个事物安全性的,就是你不用考虑这个事物问题,这是没有关系的,你比如说你在主库这一块设置这个事物,那我在我这个blo里边会把这个事物给你还原出来,OK啊,一般来说啊,我们要开启这个my circle的二级日志了,那我确实有1%的一个性能损耗,就是这个CPU,它会占用你的CPU。
05:14
去来适时的维护这个事情好吧,哎,那咱们这个二级日志有什么使用场景啊,一般在公司里边有两个最重要的使用场景。第一个。就是一个咱们刚刚讲的这个主从复制,就是my circle的这个主从复制集群,从机通过这个主机的blog来还原我主机的数据啊,这是第一个就是my circle的主存复制集群,第二个就是数据恢复了,有些公司你家这个my circlel没有搭建这个主存复制,它也会把这个blo这个这这个功能给我打开,为什么呀?因为啊,如果说我们开启了这个blo,那这样一来,在我这个my circle的使用过程中,我这个数据就会以B冷的形式再给他存一份。那万一你一不小心是吧,你的my circlel被一个被一些人恶意的删库了,删库删表,把这个数据删了,或你的数据丢失了,那只要你这个blog是有的,那我们就通过一些工具把这个blog再给它还原成数据,就是说咱们这个blog另外一个应用场景就是数据恢复,通过blog咱们可以恢复咱们这个MYL的一些数据,好吧,首先咱们这个my circlel它自带一个命令,就是my circleql blo,就能够解析你这个blo日志啊,就通过这个东西,咱们可以当做一个数据的备份,好吧,哎。
06:30
那另外啊,咱们这个买circle的二进制日志。啊,他说是开启开启二二进制了,这是个blo,开启之后呢,咱们这个blo它又分为了两类文件,一类就是那个二进制的所有文件,它那个后缀名叫做点index,啊等一会儿我们在这个操作过程中,我会给大家具体操作,给大家演示一下咱们这个my circle的lo,就咱们这个my circle的lo在开启以后呢,它这个数据分为分为两个,一个是所有文件,哎,另外一个就是真正的my circle的日志文件了。
07:01
就咱们这个所有文件,就是记录你当前正在使用的是哪一个日志文件,咱们这个my circle的日志文件,它的后缀是以这个点000开始的,就比如第一个就是000001,那第二个就是如果它这个文件大小超过了一个范围,或者是你这个MYSQL重启了,那我下一个文件就是000002啊,是这样的啊,那我这个index什么呀?Index就是记录了你当前所有的一个。二进制文件,我最后一个就是我正在使用的,所以他们是通过这两个配合使用来记录咱们这个MYSQL的二进制日记,日日日志啊,就是咱们这个,呃,二进制二进日志,它记录了咱们这个my circle里边所有的DDL和DML,当然那个查询员没有,查询员没有啊,那我们明白了这个my circle的blog以后呢。那咱们接下来就给大家讲一讲,如果我想在my circlele里边开启这个blog,我应该怎么开启啊?首先你想开启这个blo了,我们得通过一个参数来设置咱们这个b blog哪个参数啊,首先啊,我们得找到这个MYSQL配置文件的一个位置,如果咱们是Linux平台,就我在Linux里边玩这个MYSQL,那我这个配置文件就在我的ETC卖点CF里边啊,这个卖点CF在我这个根目录的ETC目录下,这个就是我Linux平台,我这个MYSQL的这个配置文件。
08:18
OK啊,那然后呢,然后如果在我的Windows里边呢,那就看你这个MYSQL的安装位置了,在你这个my circleql的安装目录下有一个卖点按I啊,那这个文件就是咱们这个MYSQL的配置文件啊,一般我们玩的都是都是Linux平台,这个大家了解一下就好了,好吧,那如果说我们找到了这个my circlel的对应的配置文件,那么应该怎么办?我应该在这个my circlel d这么一个配置区块下,我们添加这么一个参数叫log变in等于my circle变啊,当然啊,这个my circle变是你自己自定义的。你可以给他设置成master,就比如说有的有一些公司他把这个东西设置成master master,你甚至可以设置成AA,就这个无所谓啊,这这这这个东西设个啥给讲一下啊,这个东西就是你将来产生的那个blog,它的一个前缀,如果你跟我一样设置的是my circle和bin,那咱们将来在咱们这个my circleq里边,它生成的一个二进制日就叫my circle bin,点零啊,点00001啊,就这么个文件,那如果你设置一个AA,那就是AAA点0001了啊,所以说这个东西大家自己去设置就行了,一般我建议大家设置成这个my circleql b,因为我们顾名思义嘛,建名之义就知道是my circleql的二级值日,日是这样的啊,嗯,那然后呢,咱们这个文件是吧,每次my circleql重启,或者这个文件达到一定这个大小的这个阈值的时候,我都会新生一个文件,就它这个文件是个滚动的,大家要知道一下啊,它是按照数据编号的,第一个是001,第二个002,第三个003是依次递增的啊,那然后呢,咱们这个my circle除了这么一个参数以外呢,就。
09:45
这个参数就可以开启咱们这个blog,那除了这个以外,我还有个还有一个比较重要的参数是什么呀?是咱们这个b log的一个format。B log的一个格式文件,那咱们这个b log有什么格式啊,它有什么分类啊,首先啊,咱们my circleql的blog格式有三种,哪三种啊,就这个参数,你分别可以填这三个参数。
10:07
一个就是statement,一个是mixed,一个是肉。那我接下来就给大家详细讲解一下,咱们这三个参数啊,是有什么区别,好吧,首先第一个啊,如果说你把这个my circle的格式,就把把把这个my circle的blog这个格式设置成了statement。这是什么级别啊,这是语句集statement,就是咱们这个circle语句,Circle语句OK啊,也就是什么意思啊,咱们这个blog会记录你买circle每一次执行的那个DDL和DML那个circle语句,你只你写个什么circle,我会原封不动把这个circle给你写到这个blo里边。就我记录的是circle,而不是数据。OK,大家都知道咱们这个my circle里边这个数据是不是也是通过这个circle来给他做的修改和新增啊,或者删除是吧?咱们这个statement语句级别,它就会记录你的circle,你的circle执行的是什么,那我就原封不动把你的circle写在这个b block日志里边,那这种模式有什么好处啊,它相对咱们下边这个肉模式,它比较节省空间。
11:10
因为我记住的就是这个语句嘛,S语句,你看大家大家都知道,这个S语句一般都还好是吧,它是呃,数据量是比较小的,所以咱们比较比较节省空间,但是咱们这个有一个缺点,就是什么缺点啊,就是有可能会产生不一致性。什么叫不一致性啊,就比如说我在我的这个主库这一块是吧,我写了这么一条语句,就是update test的这张表,然后set它的一个创建日期,等于当前时间。那如果说你把这个circle你原封不动,你给我存到了这个blo日志里边,那你将来在做这个数据的恢复的时候,因为我的blo记录的是这个SQL语句,那我将来在做数据恢复,那我恢复的时候也会执行这个SL语句。那大家都知道时间这个维度它是一直往前走的,那等咱们恢复的时候,那这个no当前时间是不是就做了变化呀?啊,时间是不可能一直停留在某一点的,所以说啊,咱们这种语句级别的这个这这这这种模式,它会由于你的circle里边的一些随机数啊,或者一些这个单当天时间啊,它有可能造成你这个数据不一致的问题,所以说这个问题是比较致命的,它的是一个缺点比较大的。
12:21
因此,如果你想完全保证你这个数据的100%还原,我们没有人会用这种格式,大家知道就好了啊。那除了这个statement,我们还有什么呀?我们还有一个肉啊,肉就是行金。就是行级的这么一个这么一个级别,就是数据行肉吗?那这个代表什么意思啊,那就是我这个blog呀,会记录你每就是你这个数据的每次操作以后的一个每行数据的变化,就是你变化什么数据,我就原封不动把你这个数据我给你存下来。存到这个blog里边,那都知道是吧,因为我保存的就是你的数据,那我将来在做数据的还原,就是通过这个blog,咱们在做这个数据的还原的时候,我一定能够保证我两次的数据是100%的。
13:08
100%一样的,因为我记住就是你的数据,哪怕你当初你给我设置这个no,当前时间,那我记住的不是这个no,而是我把你那个时间给你保存下来了,那我将来在做数据还原,那我就可以把你那个时间,就是当时的那个时间原封不动给你恢复过来啊,是这样的啊,所以说这个肉这个级别,它的这个级别的优,这个安全系数是比较高的,就是它的优点就是保证数据的绝对一致性。因此不管你的circle是什么,引用了什么函数,我只是记录你这个circle最后的一个数理结果,因此我我能够保保证我这个数据的绝对一致性,那咱们这个缺点呢?缺点就是空占用空间比较大呗,因为咱们这个my circle数据量还是比较大的,当你这个数据量比较大的情况下,是吧,咱们这个blog就会占用一定的磁盘。啊,不过现在随着咱们这个技术的发展是吧,咱们这个硬盘也是越来越便宜了,咱们这个磁盘也是越来越大,这个大家还是可以接受的,OK啊,那除了这两个以外呢,我们还有一个混合级别,就是这个Miss。
14:06
那这种混合级别是什么呀?它属于这个STEM的一个升级版。就是它会在一定程度上解决咱们这个语句模式的因为一些情况而造成的数据数据数据数据不一致问题,混合版就是两者都有,就什么意思啊,如果说诶,你这个circle里边没有类似这种当前时间啊,随机数啊,如果就是我就是一个比较普通的数据插入语句,就比如说我inerl,我一张表,银色的一条数据。那像这种不会更改我这个数据的变化的,就是我这个数据我能够保证百分百一致的circleq,我会记录circleq,那如果你这个circleq里边有这种当前时间或者随机数,那我就不保存circleq了,那我就保存这个数据,所以说咱们这个Miss的就是来两者的混合版,混合级别,好吧,就它是能够解决咱们这种模式它的一个数据不一致问题的啊,就它默认还是sment,就它默认能保存还是保存circle,如果这条circle有随机数,有一些别的东西,我不能保circle口了,我再保存这个数据啊,是这样的啊,嗯,那这个优点就是节省空间。
15:08
它同时兼控了一定的这个数据一致性,缺点是啥呀,就是极个别情况下,它依旧还是有可能会造成咱们这个数据不一致的啊,所以说他们这种它这种mix的模式也没有那么智能,没有那么完美,那因此啊,在咱们这种一般咱们在咱们想100%对这个MYS口做一个数据的监控了,所以说啊,我们还是一般都把这个MYSQ的blo,咱们给它设置成这个肉的格式,就是行级模式,我是按行把你这个数据行一行行数据咱们给它写到这个b block日志里边啊,因为大家想咱们这个my circle是吧,咱们咱们这个MY想对这个MY做一个监控分析了。你说我我我拿到你这一堆数据好啊,还是拿给你一个circle好啊,那肯定是拿一堆数据好啊,大家想啊,我将来我这个ma要把你买circle的数据传给卡夫卡呀,同学们,我们不是主动复制,大家想啊,咱们这个Maxwell,它又不是咱们这个主动复制,那如果说你想啊,我通过这个Maxwell对你这个ma ma s做这个监控,如果说我拿的是你写的circle。
16:08
那我接下来把你这个circle传给了卡夫卡,就比如说啊,咱们下游是卡夫卡,那你说我在卡夫卡里边执行你这个circle,我能得到你的数据吗?那我肯定得不到啊。那因此大家想啊,尽管你这个mix的这个级别很完美是吧?哪怕你是完美的,我如果想用Maxwell来做这个数据监控了,我都不能设置mix的,因为我要你的circle没有任何用处。我必须得要什么呀,要你的数据啊,因此咱们将来咱们我们马上要玩,要玩这个MYL,咱们在玩这个MYL之前呢,咱们需要给咱们这个my circle开启这个blog,并且咱们对这个blog这个模式有一个要求,必须设置这个肉模式,好吧,大家把这个听懂就可以了,OK啊,那这样一来就是咱们这个my Maxwell的一个工作原理,以及这个my circle的这么一个bloo啊,我简单给家做一个介绍,就你想玩这个mal,你必须对这个有一个详细的了解,好吧啊。
我来说两句