00:00
好,那么我们这个主存的同步的过程啊,咱们就带着大家呢,就搭建完成了啊,然后呢,在我们刚才呢,配置这个主机配置文件的时候呢,是不是有一个参数呢,叫做blog form啊,然后呢,我们说呢,具体的这个值有这个叫statement啊,也有呢这个叫啊,还有呢,这个叫mix是吧,这样的三种格式啊,咱们在上一章的时候呢,其实也提到过这个事儿,但是没有具体的给大家去讲解,然后这块呢,我们说一下他们的这个区别啊。好,首先呢,我们说一下这个statement呢,是它一种默认的格式啊,就是我们不设置的话呢,它默认的就是这个statement,它的特点呢,就是每一条啊,就是我们这个,咱们说呢,Blog里边呢,是不是记录的都是更改整个我们数据表的这样的一些词口语句啊,增删改包括呢DDL对吧。那么如果我们写的是这个statement的话呢,它相当于里边呢,诶存放呢,就是我们的一条条的这个SQL语句啊,一条的这个SQ语句,所以呢,我们把这种模式呢,就称为呢叫statement啊,然后呢,也可以呢,叫SB2啊,就是这样一个单词的一个缩写,好那么对应的另外一种格式呢,叫做肉啊肉呢叫基于行的格式啊,简称呢叫2:2是吧,那这样一种格式,它记录的就是我们真正呢,就是呃,你针对于哪条记录呢做修改了,然后呢,这块呢,就是记录的那一条一条的这个修改这个数据。
01:18
啊,什么意思啊,我给大家举例子,你比如说呢,我们呃执行了一个update操作,然后呢,我们是做了一个side,然后呢有个where语句对吧。我们这一个SQ语句执行下去之后呢,有可能会影响多条记录,假设呢,我们影响了100条记录好,那么我们如果使用的是这个叫statement的这种格式的话呢,其实我们在这个blog里边呢,只会记录这样的一条思语句啊,一行语句呢就搞定了,但如果呢,我们要是用的这个肉模式的话呢,相当于你影响的是哪100条记录啊,就把这100条记录的这个修改的行为呢,就一个一个的都记录下来了。那么显然的话呢,我们看到这种格式里边呢,是不是这个记录的信息量会更大一些是吧?诶我再举个例子啊,比如我们这时候呢,使用的这个叫insert select这样一种方式呢,做的批量的添加啊批量添加,但如果说我们用的是这个SBR这种格式呢,是不是你只会呢,把这个S后语句记录在我们这个log文件里边,对吧?但如果说你要是使用这个肉模式呢。
02:13
你想想啊,如果呢,我们是从另外一个表中呢,把这个数据呢,倒过来添加到我们现有这个表中,假设呢,我们倒过来啊,100条记录啊,那么你要用这个肉模式呢,是不是在这个B道里边就会记录这100条插入数据的这个操作了。是吧,哎,这就是个情况啊,就这样的情况,包括呢,我们刚才那会儿呢,讲解到的啊,咱们在这个哎主机这里边儿呢,我们是有一个隐色的,是不是用的是这个叫哎是不是叫这个host name,哎那么相当于呢,就是我们使用的statement的话呢,相当于呢,就是我们在blog里边呢,就是记录的这样的一条语句。啊,这条语句,所以说呢,我们在这个从一上啊这块呢,我们去做这个执行的时候呢,那它呢,呃也是记录在这条语句,所以这条语句呢,在我们这个从一上呢,做一个执行的时候呢,它也呢就理解成是这个host name了,那那我们这个从句的host name的话呢,是不是叫爱硅谷零七啊,所以这块呢,我们就把它呢给插入成功了。
03:03
啊,但是你要用这个肉模式的话呢,相当于它就是记录了你到底插入的是什么东西啊,那就跟我们这个statement就不一样了,是吧?诶这个大家注意一下。那么这两种模式呢,说完以后呢,我们看一下他们这个优缺点啊。首先呢,我们说这个STEM这种格式说叫历史悠久,技术成熟。啊,像这种话的话呢,其实在我们这个互联网领域,尤其是这个it技术领域里边,这种历史悠久的话呢,有的时候反而不像是优点是吧?啊,因为技术的这个变革啊,实在是太快了啊啊这个大家看一下就行,下边这个呢,说不需要呢,记录每一行的变化啊,就我们刚才提到的光记录SQ语句减少了病的一个,呃,日志量文件较小啊,明显的优点。再者的话呢,说它这种包啊,它这里边呢,包含了所有数据库更改的信息啊,可以据此呢来去审核我们数据库的安全等情况啊,这个呢,就相当于你这个SQ呢,呃,通过你记录的这些信息呢,我们直接呢,可以审查一下你到底都做过哪些行为。啊,那么相较来讲的话,我们这个肉里边呢,光记录了你到底干什么了,到底是用哪些色后语写了就不知道了,所以这个呢,其实算是它的一个这个具体的缺点了。
04:06
是吧,哎,不知道你都复制了些什么语句啊,哎这样个情况啊,哎太细碎啊,然后这块呢,还提到了说。我们可以呢,实时的进行一个还原,而不仅仅呢是用于复制了啊,那我们这块呢,诶,包括咱们上一章呢,讲的使用这个blog呢,进行一个数据的恢复的时候,我们关注的其实也是一个一个的circle,其实对应的是不是就我们这个statement这样一种格式啊,啊没问题啊好,下面提到说这个主存的版本不一致啊,也没关系啊,因为这时候呢,我们主机这是从机,然后呢,从机这块呢,执行的都是主机执行过的那些S扣,所以我们这个从机的话呢,一个版本呢,如果比较高的话呢,诶向下兼容嘛,诶这个主从的时候呢,我们说从机呢版本不一致,跟主机没问题,它高一点是可以的。啊,那么下边这个肉的方式呢,最好是一致的啊,那缺点缺点也挺多的啊,哎,我们看到优点很多,那缺点的话估计也少不了。你看列的也很多哈,说呢,不是所有的这个update语句呢都可以被复制,尤其呢是包含不确定性的操作。
05:01
啊,你想想我们这个比如说UID啊,咱们要在这个,呃,这个这个主机当中啊,我们使用的UID了,然后你要从机中呢,记录的也是UID,那你获取到的这个肯定是一个随机值就不一样了,包括我们说的user啊,像我们刚才说的这个host是不是都是这种情况呀,哎,No啊那么像这些函数呢,哎,这也是咱们当初在创建存储函数的时候呢,说不被信任的原因啊,因为默认的也是这个statement格式啊,你传过去这个circle呢,在执行的时候呢,在重新上呢,可能就跟主机上不一致了。啊,这就是他的主要问题啊,然后这个呢,说这会产生更多的这个行机锁,相较我们这个肉的格式能理解吗。啊,能理解吗?啊,你看啊,比如我们这时候呢,去隐私的时候select我们查另外一张表啊,那其实这块呢,我们是不是针对这张表呢,也会做一个相关数据的一个锁定,但是你要是用这个肉的模式的话呢,我们只只管往你当前的表里边儿去插入就完了,跟人家另外的表没关系。是吧,哎,这个锁呢,就会少一些啊,下边提到说复制需要进行全表扫描的,这个R的时候锁呢,也比我们这个RRB2是吧,我们这个肉的方式呢,需要更多的行机锁,这个能理解吗?
06:07
啊,想想怎么理解啊啊,你比如说我们这块呢,做这update的时候呢,哎,Update是吧,哎相应的我们下边是不是都有这个where语句啊,假设呢,我们针对这张表啊,呃,如果你要没有使用这个这个索引的话呢,是不是我们就意味着是全面扫描,比如我们要修改的是这个第100条这个记录啊,你就从小往下走走走走走找到第一排的记录了,诶然后呢,我们开始就做一个这个更新,这个时候的话呢,因为你没有使用索引,你要使用这个state模式的话呢,你第100条呢,是你要更改的数据,那么前边的这99条呢,也会进行一个锁定。啊,因为说呢,我们这个叫全面扫描的话,你扫描了多少行,我们就要多少行去加锁了。啊,这个要注意一下啊,Update嘛,还是一个X锁是吧,但是你要是使用这个肉的模式的话呢,诶他就知道呢,你就是修改这一条记录,前面不管,所以说呢,人家只是锁这一条记录,所以人家的行迹锁呢,是不是就更少一些啊。啊,没问题啊好,下边说呢,针对这个auto increment这样的字段来讲啊,这个呢,我们前面是不是提到它上面有一个对应的表级锁。
07:07
词增锁是吧?哎,那么哎这个隐私语句呢,会阻塞其他的隐私语句啊,因为同时要执行的话呢,也涉及到强锁这样的一个问题,包括呢,上一章啊上上章了,我们讲这个锁的时候呢,是不是还提到过说它对应的不同的这个锁定的模式是吧?哎,这个大家注意一下啊。好,然后呢,下边说对一些复杂的语句呢,在重复器呢,消耗的资源呢,会比较严重一些啊,而这个呢,任务模式呢,只记录了发生变化的那条记录啊,比如你写了个搜与剧场啊,就做了一个特别小的个事儿,而我们这个肉的模式呢,直接就做这个事儿就完了,你这呢还记录一堆是吧,消耗的资源呢,会严重一些哈,有时候呢,还有这种各种嵌套啊啊,那你这时候呢,会涉及到很复杂的这种复杂度啊。然后呢,消耗更多的资源啊,出错的话也会消耗更多的资源,没问题啊,说这个数据表呢,必须几乎和主服务器呢保持一致才行,否则呢就会出错啊,因为呢,我们这个色控呢,你放到这个从机上执行的这个表结构啊等等最好都一样,只要有些不同的话呢,我们这个色很容易就出错了是吧。
08:06
好,这个大家都了解一下就行啊,然后我们这个肉模式的话,优点安全可靠是吧,然后呢,多数情况下呢,这个从服务器上这个表如果有主键的话呢,复制就很快啊,这个你自增的方式是吧,就一就下去了啊,然后这块的话呢,我们说需要更少的锁,这不就相较于上面它的缺点嘛。没问题是吧,然后呢,我们这块呢,都知道你到底要做哪些操作了,然后多线程的方式呢,去复制啊,成为可能啊,OK,然后上边呢,你这个circle呢,因为它有个先后顺序啊,所以就不能呃说多线程你串行方式执行,呃主要缺点就是这个文件呢太大了是吧?呃,然后呢,这个呃复杂的回滚的时候呢,Blog呢,会包含大量的数据啊,这个更恶心是吧?上面呢,我们要是回滚的话,你加个肉back啊记录过去就行,你这块呢,呃,你又要回滚了,上面呢,刚记录了,呃说做了哪些事,后边又回滚了,是不是把这个事儿呢还得再。哎,反着来一遍是吧,哎才行OK。然后呢,主夫器上呢,执行update语句的时候啊,发生的变化呢,写到这儿,这个只写意思,刚才说过了哈,行,那这呢就是我们看到他们二者的一个优缺点啊,应该说呢各有利弊,那怎么办呢?我们说呢,又引入了一个叫mix的这种格式啊5.1的这版本就引入了挺好是吧,他们二者的一个结合,那么在一般的修改语句当中我们就使用了,因为呢,它这个容量更小是吧?啊如果呢是一些函数啊,我们呢,有函数的话,有可能导致这个主从的记录的数据就不一致了啊怎么办呢?诶我们就建议呢,哎,自动的去选择这个肉的这种格式,OK。
09:31
啊,也就是说针对于我们这个MYSQ的这个执行的每一个SQL语句呢,它都会呢区别的去对待,到底应该使用的是这个statement还是这个road的这种格式啊OK,好,这个呢,我们就介绍到这儿啊然后的话呢,我们关于这个一主一从这个架构啊,咱们就搭建好了,呃,但是呢,咱们没有呢,进行下一步啊,叫做读写分离的一个,呃,执行这样的话呢,咱们在实际开发当中,通常使用的都是这个,呃,数据库的这个中间件来做的。包括的话呢,我们这个一主一从完了以后呢,是不是还可以呢,设置叫诶多主多从。
10:04
啊,或者你看我们这里边儿呢,这个是一个master,这也是个master,它呢是我们当前的这样的一个主库啊,这个这个血库,然后这个呢,我们可以理解成它是一个备库。啊备胎是吧,它是个备库啊,这个呢,就是我们说的这个叫毒库啊从库这样的意思,如果我们这个master要挂了的话呢,我们这个备库呢,立马顶上啊,那你这个呢,要重启以后呢,它就充当一个备库了,诶所以他们两个呢,是互相呢做一个复制操作啊,那么基于这个结构以后呢,我们再使用这个数据库中间键呢,来去做一个这样读写的一个分配啊分离包括的话呢,我们还可以呢去实现这个,你比如说我们这个诶从库里边呢,假设就这一个啊你这一个的话呢,这个读的压力太大了,我们不说呢读多写少嘛,诶我们可以呢,是不是多个这个从库,然后呢,我们还可以实现呢,叫分库分表这个操作。啊,那么关于这些信息的话呢,咱们就不在这儿讲了啊呃,基于我们说这个ma呢,去讲解会更靠谱一些啊,所以大家呢,你可以回到啊,咱们比如说呢,以这个诶B站为例吧。
11:01
哎,大家呢,如果说你想学习刚才我提到这样的一些知识的话呢,诶你可以呢,去搜索一下B站上的这个麦cat啊,然后呢,第一个呢,就咱们商务啊录的啊夏磊老师录的,然后呢,这里边这个内容量呢,还是比较多的啊,这个一主一从啊,这个双主双从啊,包括后面这个分片这个策略啊,还有我们这个高可用啊还等等啊这样的一些内容呢,都有啊,大家呢,可以过来呢,进行一个my cat的一个啊学习啊,啊相应的这个课件的话呢,大家如果有兴趣呢,想看一看,诶我呢也放到了咱们这个诶资料。在这个位置啊,关于这个maca的相应的一些这个资料信息啊,OK行,那么关于我们这里边这个一主一从的整体内容呢,咱们就说到这儿啊,下边呢,我们来说一下这个在整个这个执行过程当中啊,可能会出现的啊,数据同步啊,同步的数据不一致的这个问题。
我来说两句