00:00
好的同学们,接下来呢,我们看第二小节啊,刚才呢,我们已经聊过了,像这个canal呢,它是通过解析买S的一个日志来完成数据同步的,呃,那么在买S当中呢,这个日志其实就是我们的。B log啊,所谓的b log呢,就是beary log二进制的一个日志文件,那这个呢,其实相当于是my circle当中的一个预写日志,呃,那在我们对于my circle开启了b log以后,在我们对于my circle当中实现增删改这种写操作的时候,那么它会将我们的操作写到这个日志里边,然后再去写我们数据库里边,表里边的数据啊,那这个有什么好处呢?在我们如果表挂掉以后啊,或者说不小心删了一些数据啊,我们想恢复,我们可以通过这个blog做数据恢复了啊呃,那所以说呢,这块我们可以看到买S的一个二进制日志,也就是说这个所谓的blog啊呃,是买S当中最为重要的日志了,它记录了所有的DDL和DML,当然这个当中呢,除了查询语句,因为查询语句是不不会对我们数据库当中任何数据做修改的啊,所以呢,它就没必要。
01:16
要记录了,然后以事件的形式记录,还包含耗时啊等等的内容啊,而且同时二进制文件呢,是事务安全性的,也就是说它要保证这个数据跟这个日志都是同步写入的,才会真正的呃,达到我们数据的写入啊,呃,那么。如果说我们开启了这个日志就blo blog啊,那么它会对于买S当中数据呢,会有一些性能的损耗,这很正常,因为我们不光要写数据了,我们在写数据之前还得先写一下这个日志数据啊,所以呢,它会有一些性能损耗,但是它带来的好处呃也是毋庸置疑的,第一就是说在我们做主从集群的时候,假如说呃,我们有多个买四个服务,但是呢,我们想把它做成一个主从的集群,那这个时候就需要这个blog参与了,也就是说呃,主节点呢,会将这个操作日志写到blog里边,那么从节点呢,就读取blog,按照你主节点所做的一个事情,我挨按照步骤挨个执行我们的。
02:20
语句啊,那这样已达到从节点跟主节点数据的一致性啊,那么第二个作用呢,主要就是自然的数据恢复了,对吧?刚才我们已经说过了,万一你在删库了,诶,它可以通过blog将我们的数据呢达到恢复啊呃,在我们的my blog里边呢,主要有两个文件啊呃,第一个呢,是一个索引文件,方便我们快速的去查找到我们当前写到哪一个日志了,哪一条数据是什么位置,对吧?第二个呢,当然就是我们真正的操作日志。这个数据了啊,它里边就记录所有的这个DDL和除了查询之外的一个DML啊,所以我们现在就清楚了这个b logg到底是个什么东西,也就是说在我们使用canal读取my circle变化数据的时候,我们是要对当前我们的MYS开启blog的,这个大家应该能够理解啊,好,那第二块呢,我们看一下blog,等会开启的时候呢,它其实在MYS当中呢,给我们的blo有三个不同的级别,或者说三种不同的格式啊呃,第一个呢叫statement,是语句级别,第二个呢是这个肉行数据级别,第三个呢是这个mix啊,它是混合了这两者之间的一个优势啊。那接下来呢,我们就要分别讨论一下,呃,像statement和肉这两种之间的一个区别,呃,首先呢是第一个statement,我们把它称为呢叫语句级别,它是直接记录当前操作的这。
03:55
每次的。具体的思科语句咱们可以这样理解啊,呃,那它有什么好处呢?
04:02
它的好处就在于我们一条S语句啊。它可能会改变很多条数据,大家想一下是不是。对吧,我们一条搜狗语句呢,可以在MYSQL当中产生这种批量操作啊,那如果说我记录这个数据本身,那我可能记录很多行,那如果说我记录这个语句本身呢。那我是不是只需要记录一条,所以它的一个优势就在于节省存储空间,但是用这种级别呢,它可能会有数据的不一致,比方说我们中间用到了now这样的一个函数,那我们知道像主节点和从节点,它们俩执行当前这个四个语句的时间肯定是不一样的。是不是,那他在从接点执行这个搜索语句去恢复数据的时候,大家想一下,它是不是有可能会产生这个不一致性啊,对不对啊,或者说我没有使用这个时间函数,我用到了一个随机数的函数呢,那么主节点可能随机数产生的是五,那到了从节点有可能产生的是三啊,也就是说呃,用语句级别呢,它有缺点的,缺点要造成这个数据的不一致啊,主要在于我们S克里边儿可能会使用到当前时间啊,或者随机数类似于这样的函数会导致数据不一致啊,那肉级别呢,刚好相反啊,它的优点呢,就在于能保证数据的绝对一致性,因为刚才我们也聊到了,像肉行数据级别的。
05:31
它呢是将我们改编的数据保存到blog里边,那我们从节点只需要按照这个数据进行恢复就OK了,是不是啊,那也就是说你用到了这个时间函数也好,用到了随机数也好,你保存的是。产生的这个时间,或者说保存的是已经调用随机函数产生之后的这个数据,那么我用行级别的这种呢,可以保证数据的完全的一致性,但是它缺点就在于,如果说我们一条circle可能会影响到很多条数据的变化,那么它就会占用较大的一个存储空间,但由于它是放在呃这个磁盘的,所以它这个空间呢,相对来说就还好了啊,Mix呢是S的升级版,一定程度上解决了一些不一致的问题啊,就是说绝大部分时候呢,它还是用的这个STEM的级别,如果说当函数当中有这种什么随机数啊,或者说像这个呃,UID啊,呃自定义的一些函数的时候呢,它就会用肉级别的方式来生成这个数据啊,但是它有缺点,就是有一些比较特殊的情况,它还是会造成这个数据的不一致啊,这个呢我们要清楚一下。
06:50
所以综合上面的对比呢,呃,我们现在是想做这个数据分析是不是。想要做这个数据分析,所以呢,在这个过程当中,我们也只能采用诶中间的行。
07:04
级别这种方式了,没有问题吧,因为我们是要做数据分析,很有可能对吧?那如果说我们做主动复制你随便了啊,那现在呢,我们更重要的在实时数仓当中啊,采集数据到这个消息队列,以供Spark streaming和我们的flink去使用,但是对于我们steming也好,还有flink也好,并没有买S的执行引擎,也就是说你给我S语句,我没有办法变成一条一条的数据,所以在做实时分析的这种场景当中,我们只能采用什么?肉级别OK吧,好,这是我们所说的在MYS它当中的blog相关的一些点。
我来说两句