00:00
那接下来我们就要进入到Maxwell部署的这么一个章节了,好了,那首先我们要把炸包Maxwell的炸包拿过来,诶,踏包拿过来给它解压,来到我们102的CD-OPT software CD-OPT software,然后把我们文档当中,哎,给大家了这个资料,资料里呢就有这个Maxwell,我们把Maxwell给它拿过来,这啊Maxwell有两个版本,一个叫做教学版,另外一个叫做原版,原版呢就是官方网站上的版本,但我们现在是学习的阶段,我们要用教学版,在教学版里我们呢给它进行源码,给它进行了一个重重写啊,那这个源码改了什么呢?我们给它增加了一个字段,叫做Mo data,那这个字段为什么要增加我呢?先不跟大家说,等稍后遇到问题了,我再告诉大家,我呢先给他拿过来。好。
01:01
哎,大家呢,有兴趣的也可以先看一看啊,下面有一段话在我们的文档上,诶在这呢,然后我LL一下,我在这个地方他杠。Z X VF max,然后杠大C到OPT model,加到OPT model目录哇,CD到OPT model。那接下来之后LL,然后我把Maxwell给他改个名字,MV。Maxx maxw OK,那进下来之后啊,我们看一看,我CD到。Maxwell进来之后,这个就是Maxwell啊,加目录了,我们可以看得到啊,Maxxwell它的目录看起来就非常乱,你看配置啊,它都给我们放在哪儿了,都给我们放在安装目录下面了,这就能看出来macel的开发人员,诶,这个比较随意啊,你看所有的配置文件,他居然都放到加目录了。
02:03
好,那接下来我们就要按,呃,我们就要部署mywell了,那部署mywell我们看一看,我们呢需要先对my circle进行一些配置,为什么呢?大家还记得我昨天说Maxwell它想要使用的时候,或者说my circle的组从复制我们呢就必须要开启一样东西,开启个啥了,是不是要开启一个bin log日志啊,原因my circle它默认是。不开启b belong日志的B日志它是关闭的,那我们呢,要给它手动开启,那怎么开启,在下边这已经给大家写好了,我们要来到VI,我们要来到ETC,下面有这么一个配置文件,叫做my.com,来进来之后我们过来粘贴进来,进来之后啊,在这里有这么多内容,我们看一看啊。首先我们这有一个serve ID,你看我们这有吗?
03:01
哎,Serve ID我们这是没有的,那这个是什么呢?啊行,我们先把server ID拿过来,这个server ID它是标记什么的呢。它呀是标记我们当前的这个买SQL数据库,哎,它的一个唯一的ID,你比方说我们在做卡夫卡集群的时候,还有JK集群的时候,我们对应都有一个broke ID或者是MYID,哎,它呢标识了一个唯一的节点,那搜ID也是一样,它标识一台my circleql的节点,那如果说我们要用到集群的模式,My circleql集群的模式,或者说my circleql的组成复制,我们就必须要把这个搜ID给它配置上了,但我们呢,如果说我的my circleql,它就是一个单节点的my circleq,就像我们,哎现在的这个my circleq,我们是没有必要给他配置搜RID的啊,因为它只有它自己再来。接下来我们就要启动blog,当我把这个配置我一给它过来的时候,我们的blog它就启动了。
04:03
啊,但这个地方呢,大家看这叫什么log b,哎,开启我们的blog,它的等号后面是给我们的bin log文件起一个名字,我们的blog它是一个二进制文件呢。所以说我们要给它起一个名字。那这个地方这个名字它是怎么用的呢?它呀也是一个文件名的前缀,我们呢,在这默认的叫做my circle-B,那它最终的展示形式是什么样的呢?它是这样的啊,它是my circle-B。然后再来一个啥呀,下划线000001啊好了,现在这个日志,这是其中的一个并漏日志文件,当这个日志文件它快写满了的时候,它会开启一个新的文件,依然叫MYSQL杠币,然后下划线000002,然后000003,哎,依次的往下滚动,OK,那这个是开启并烙日志。
05:05
那开启blo日志,我们看下面还有一个参数,Blog format blog日志的类型,什么叫blog日志的类型呢?也就是说我们blog日志文件当中啊,我们写写的这个日志文件,它是一个什么样的类型,那还记不记得在昨天的时候我跟大家说,我们blog日志当中记录的是啥呀?是不是就是我们一条一条的SQ语句啊。啊,我们呢,之前呀,说的是记录的一条一条的serve语句,能不能行呢,一道能不能记录S语句呢,可以有一种模式,它就是能记录SQL语句的,那我们看看它除了记录SQL语句,它还有什么模式来。看这啊,啊,第一种模式叫做statement模式,那这个模式呢,它是基于啥的?我们看belong呀,会记录我们所有的circleql语句,包括insert update delete啊,也就是说记录我们所有数据库变更的circleql语句,这个模式就是statement模式,那这个模式这不就是我们昨天说的嘛,哎,它就是statement模式,好了,那它是一个statement模式,然后它记录的是一个circle语句,那除了这个模式,我们看看下面还有一个。
06:29
叫做肉模式,它会记录什么呢?它是基于行来记录的,也就是说它会记录我们每一次变更操作的。变化,你比方说我们执行了一条insert语句啊,那这个insert语句我们记录的就不是circle了,我们记录的是什么呢?我们记录的是当前我插入的这条数据,你比方说我这有一个ID是一内幕是张三啊,年龄是18岁,他记录的是这个,那如果说是update语句呢?
07:07
他会把我变更之后的这一整行记录都记录下来,那好了,我在这儿我就变了一个名字,我把张三变成了李四,那它对应的也会把我们的ID和年龄18岁也给我们返回过来啊,它不光会记录我们变化的这个,不单单会记录我们变化的这个值啊,它会把我们它会记录我们变化的这一整行数据,再来这儿还有一个max,它是肉模式和statement的混合模式,那它为什么混合呢?好,我们先看一看肉模式和statement模式啊,他们各自有什么优缺点好了。先看啊STEM的模式,他说诶它的优点是节省空间,那大家分析一下它为什么会节省空间。原因呢,它记录的是一个一个的circleq语句,那好了,Circleq语句我们只记录,哎,我们的这一个circle就行了,但是如果说我们要记录行呢,一条数据它可能会非常非常的多吧,相对于来说一条数据它要比较占内存,但我进入SQL语句,它所占用的啊,不是内存,它所占用的这个磁盘空间是不是相对来说就要小一些呀?
08:28
那好了,这个就是statement模式它的一个优点,但是它也有一个缺点,原因呢,就是它有可能造成不一致,数据的不一致,大家想一想,为什么它能造成数据的不一致啊?来,我们再回到上面的这个图好了,我呢,现在往这个my circleql数据库当中插入了一条SQL语句。但是在这条circle语句当中,我用了一个my circle,它自带的函数叫做now函数。
09:01
大家还记得这个函数是干嘛的吗?这个now函数是干嘛的?这个now函数啊,它是获取my circleql系统时间的,也就是说对当前时间啊,我什么时候执行的闹,那这个时间它就是什么时候,那好了,那大家分析一个问题,我说啊,如果我以statement模式sta,如果我以statement模式来存储的话,那么我现在时间已经插入到my circleql了,接下来我要把我的circleq语句给写入到bin log吧,那在bin log当中它记录的是什么?是不是记录的就是我们的now函数啊?好了,那接下来level他开始工作了,他呢把我们的这个闹函数给它同步到了IO线程,然后又给我们写入到了中继日志当中,那在中继日志当中,它也对应的有了这么一个那函数。
10:00
那接下来我们的circleq线程它开始工作了,它要对我们的这个中介日志当中的circleq语句来重播呀,那在重播的时候发现,诶,你这有一个闹函数,那好了,我的circle线程我拿过来给你执行一下呗,那对应的在线程这它执行了一个now函数,然后把数据给我们写入到了数据库当中,那好了,那大家分析一个问题。我在这儿执行的时候,假设现在是。啊。十秒的时间啊,就假设现在是呃三这是几点了,54分十秒,现在是第十秒。然后我们把数据还要写入到这个日志文件当中啊b blog日志,然后我还要同步过来写入到中继日志,注意最后我在这儿执行的时候,你说还能是第十秒的这个时间点吗?很有可能他要经历两秒钟啊,到这个地方有可能就是11秒,或者说是12秒。
11:02
那这样的情况,这就叫做我们的数据啊,时间会发生不一致,原因它是这些系统函数导致的,因为系统函数它获取的是你执行的当前时间,OK,那这个就是statement的模式,它的一个问题啊。呃,STEM的模式呢,它虽然节省空间,但是它有可能造成数据不一致,那我们再看肉模式,肉模式呢,它相对来说叫要占用空间吧,但是它就不会导致数据不一致了,原因就是因为我们在写入的时候,你不执行一个no函数吗?好,你获取了一个时间了。那么我们在变当中,就是直接存储你获取的这个时间戳啊,我不会把你的SQL语句我给你同步过来。那么我在来到中继日志当中的时候,它也是一个时间戳,那你这个地方在重播,其实也是把我之前算好的这个时间给我写入到select的数据库当中,数库表当中了啊,那么在这个时候它就没有数据不一致的问题了,好了,那我们再看一看mywell啊ma max的这个模式。
12:17
Max的呀,它是一个混合模式,那我们看看它默认的是以statement模式来存储的,也就是说它优先以statement模式来存储,基于SQL语句来存,但是如果说我们的SQL语句可能造成数据不一致,也就是说在我们的SQ语句当中有这种系统函数的时候,它就会自动的切换成肉模式。那这样来说max ma啊,不是这种max的混合模式,它是不是优势就很大了呀?它既减少了空间又怎么呢,又能让我们的数据一致,诶,那对于Maxwell来说,我们是不是用max的这种混合模式更好呢?不是的,可以看到啊,在官网上max y就说了,我们要求啊blog必须采用肉模式,那不对呀,那我们刚刚分析了,用max的这种混合模式它是不是更好,那这个问题Maxwell应该是怎么考虑的呢?呃,我分析应该是这么回事。
13:26
如果说我们要用max的这种混合模式的话,那在我们的B让文日志当中,我既有circleq语句,我也有行数句,那好了,我们的Maxwell它要监控我们的blog,把binlog监控过来之后,要对我们的binlo日志进行一个重播,然后再封装。如果说我们的blo志当中要是有两种模式的话,那MY要对我们每一条数据进行判断,它要判断我这条数据是circleq语句呢,我还是一条数据,那circleq语句的话有对circleq语句的进行封装的方式,那数据的话有对数据的进行重新封装的方式,这样的话,对mywell来说,它的性能是不是要下降啊?
14:16
那我倒不如我就让你用什么呢?我就让你用一种模式,我直接就让你用。什么呀,用肉模式啊,我直接存储这个行数据,你过来一条啊,我知道你过来一条数据了,我直接就把你当前的这个行数据,我给你进行一个封装,那这样的话,对于max来说,它的性能可能要更好一些,但是它会造成一个什么问题啊,我们买circle的性能会下降吧。因为我们是基于行数据来存储的,行数据是最占我们磁盘空间的,那我们的blog它也是我们买SQ当中的一份子啊,你的blog所占用G,呃,占用的这个空间越大,那我们买circle,它的性能相对来说也就要下降一些。
15:05
啊,但这个地方就不是Maxwell要考虑的了,因为Maxwell他只要考虑的是他自己就行了,哎,你慢不慢跟我没关系,但是我快了呀,哎,我快了就行了,OK,那这个地方我们要把这些配置啊给它都拿过来,对MYSQL一些修改配置啊,OK啊,这个搜ID我之前已经拿过来了,我再把其他的配置也给他拿过来粘贴,那接着呢,我要给他把注释放开啊。好,那这个问题serve ID它是代表我们服务器的,买SQ服务器的一个VID,那这个参数呢,它是开启我们b log的这个参数,我们要给它设设置成肉模式啊,给它改成肉,注意下面还有一个blog度DB,它是什么意思呢?大家想一想啊,现在在我们的业务数据库当中,对于我们来说有用的数据库是不是只有这么一个gmail数据库啊,我们是不是只需要监控gmail数据库下面的这么多表,那我还有这么多数据库,甚至在我们生产环境当中,我们还有很多数据库,这些数据库我们现在根本就不需要监控,那你说如果我们要没有做一些配置的话,他会把我们所有的数据库的内容都放入到blo当中,那这样我们的blo日志它是不是啊会非常非常的大呀,那在这我们就要给它进行一个过滤,过滤啥呀?我过滤你只有gmail的数据库,它允许往我们b log日志当中写数据。
16:43
好了,那这我们就要做一个对应的配置了,在这呢,这个配置就叫做binlog度DB啊,我们可以通过它,然后告诉我们的这个b log日志啊,哪些哪些数据库往b log日志当中写,那好了,我现在是有一个数据库,那大家想一想,我现在要是有两个数据库,我有三个数据库,我要往bin log日志当中写,我怎么办呢?我是不是在这后边来一个逗号啊,我再来一个GM2。
17:13
啊,想想在我们之前的配置当中,大家是不是都这么配置的。我们的my circle它不能这么配,如果说我们有多个数据库的时候,我们怎么办啊,我们要这样。我来一个空格,我把它复制一下。复制,然后我到这儿右键粘贴,粘贴完之后我给它改成gmail。二、我有多个数据库的时候,我就要这么干啊,每一个数据库我都要开启一个配置参数,那好了,那我现在我们有100个数据库,在这100个数据库当中,我要监控99个。我只有一个数据库,是不需要监控的。那如果说我要是这么配置的话,我要配置99行,它相对来说不是很好啊,不是很优雅,那除了度DB还有一个参数叫这个,我右键粘贴啊,它叫做I格闹IG nor忽略我呢可以设置一下我们的blog,忽略掉哪一个数据库不监控,如果说我设置它了,我们现在有100个数据库,那我就把gmail这个数据库给它忽略了,我只监控剩下的其他99个数据库,OK,那这几个参数大家注意一下啊,好,那这呢我就给它删掉。
18:36
我只留一个OK,那到这我们就配置完了,我冒号WQ保存保存完之后。我要重启一下我们的买车口啊,它才会生效。看这重启一下my circlel ctrl c拿过来,然后右键粘贴。稍等,OK,那我的mysle现在已经重启完了,重启完了之后我们怎么样能知道啊,我们的B生没生效呢,有这么一个命令叫做show master status,我们回去啊,不是要要这样啊,呃,My circle-U。
19:21
Root-P。123456来到我们的买库之内啊,进入我们的买口,然后我执行一个命令,叫做送master status sta回。啊。受ma啊,少一个命令啊matr好,我一回车之后,它呢会打印出来这么一个内容,你看file就是我们的b log日志叫做my circleq-B,你看这不就是我们配置的这个前缀名吗?在这呢,我们的前缀名配置的就叫做MYSQL杠币,前缀名后面是点000001,那后来啊,它会滚动什么000002,你看这儿还有一个position,这就告诉我们,我们的blog它当前的位置是在哪,是在154,诶我为什么我刚开始就会有个154呢?
20:19
原因呢,就是因为我们的买circleql表当中现在不是有一些数据嘛,我们的gma数据库当中,它现在有一些数据,所以说我现在的位点应该就在154了,你看这blog度DB,这是gma我们监控的数据库,这还有一个blog I格闹DBOK,这是我们不监控的数据库,那到这儿啊,这个my circle的这就什么了,Blog我们也就呃配置完了,那刚刚啊,我们开启了my circle的B日志了,但开启完my circle的B日志还没完事啊,我们现在只是my circle的B日志开启了,我们说mama它是一个MYS的重接点,他要把自己伪装成一个mywell的啊MYS的重接点,那它就必须要有MYS的一些权限,那这个权限应该怎么配置呢?在这呢。
21:14
首先我们要先创建一个用户。我们要创建一个用户,这个MYSQL的用户名就叫做Maxwell,以及我们还要创建一个数据库,这个数据库的名字我们也叫,也让它叫做Maxwell好了,那我们呢,先创建一个max数据库,我复制拿过来,拿过来之后我来到叉CE当中,我在这右键粘贴回去创建一个数据库了,那接下来我还要干嘛呢?我还要创建一个用户,那创建用户我直接执行这个命令呢,复制粘贴。复制,然后右键粘贴我们看一看啊,可user用户名叫做Maxwell,然后我再给他来一个百分号,百分号的意思啊,是告诉我们我当前的这个Maxwell用户,他在他可以在任何节点来访问我们的ma数据库,那最后呢,我再给他一个密码,叫做Maxwell,我一回事。
22:12
回车之后我们看他报错了,他说呀,你的密码不符合我们的密码策略,那这个时候我们应该怎么办啊,这个时候我们要执行这么两个命令,这个命令它就是来降低我们数据库密码级别的啊,由于我们现在这个密码啊,它可能太简单了,所以说我们要给他降低一下密码级别啊。那默认的是什么样的呢?我们看看,哎,默认的是什么样,我也不知道,但是我知道我可以给他降低级别,你看我降低的时候,我赛global一个全局的校验,设置一个全局的校验,校验谁呢?校验我们的密码,密码的策略是零,那这个零啊,有可能就是最简单的策略了,有可能就是一个单数字的,或者是单字母的啊,或者是单个的大写的小写的都行,那除了零还有什么1234,那我们设置的这个数字越高,那它的级别越高,你有可能就是必须需要密码和数字的组合,密码数字特殊字符的组合,以及密码数字大小写特殊字符的组合,哎,等等等等啊,那好了,设置零就是最低级别,它可以设置一个单数字。
23:26
再来。那接下来我们还要给它设置一个全局的校验,校验谁呢?校验我们密码的长度,我们给它设置成是四,那设置成四不代表我们要设置一个四位的密码,它的意思叫做大于等于四啊,OK,那我把这两个命令拿回来,那这个地方啊,我怎么给它,我我想同时复制两行,我怎么办呢?我再把光标放到这个位置,放到这个位置之后,我点击我电脑上的alt按键,然后我按住不要动鼠标左键按下,我往下拉,那现在我就能复制两行内容了,然后我右键复制,复制之后我来到这边右键粘贴,然后我一回车好了,诶,怎么只复制过来一行呢?
24:14
啊,这行没复制上啊啊。复制复制之后CTRLC拿过来,拿过来之后我在这儿右键粘贴OK,那现在两行命令啊,就都被我拿过来了,好。那现在我们密码级别,我们给他设置完了,设置完之后我再执行一下我创建用户的这个命令呗,我给他复制,复制之后右键粘贴回过来,你看现在我们的Maxwell用户,我想让他密码也叫Maxwell,那它也就可以了,再来创设置完我们的这个,创建完我们的用户之后啊,我们说你光让你的这个mype用户,你存在了他还不行,我们必须要给他一些MYSQ主从复制的权限,那你看这。
25:01
首先我们要做一个这个授权啊,我们呢要给Maxwell用户授权啊,Maxwell用户我要给他授权什么呢?对我们max数据库下面的所有的表的操作权限,你看这不是all吗?哎,对我们问Maxwell用户,对我们Maxwell数据库下面所有表的操作权限,那我把这个命令给他拿过来,CTRLCCTRLC,然后到这边CTRLV右键粘贴。好了,那他现在就过来了,过来之后啊,我们看还没完事,你这个只是操作了一个数据库和表,但我们现在需要的是组成复制的权限呀,看这。也是设置一个这个全局的参数叫什么呢?Replication复制,复制谁呀?客户端的复制replication谁呀?重库的复制对谁呢?对我们所有的库,所有的表具有重库的复制,那哪一个用户呢?那这个地方就要这么解释了,我们的maxxwell用户,我给他设置对我们所有的数据库,所有的表具有主从复制的权限啊是这个意思,好,那接下来我给他复制一下CTRLC拿过来,然后我在这右键粘贴回车,那么现在这个用户我们也就设置完了,好了,那设置完了之后,我就可以给他qqu it,然后退出,退出之后,那现在用户我们设置完了,我们呢,做了这么多操作,都是对my circle。
26:36
来进行操作的啊,我们呢,现在还没有对Maxwell进行操作吧,也就是说Maxwell现在还没有组成复制的权限呢,那我们现在要是想让Maxwell有组成复制的权限,我们应该怎么办呢?那我们现在就需要让我们的这个Maxwell。让他能使用我们刚刚创建的这个Maxwell用户,那对应的我们Maxwell组件,它是不是就有组成复制的权限了,我们现在这个max用户他是有组成复制权限的,那我们就要把这个用户啊,能让我们的这个Maxwell组件让他使用,那它不就有权限了吗?那我们看看怎么让他用呢?那Maxwell用户以及Maxwell数据库我们创建完了,那接下来啊,我们就要开始来配置我们的Maxwell组件了,那Maxwell组件第一步我们呢,要先把这个配置文件它的example啊去掉啊,Con加proper example变成conf,诶这个步骤我们刚刚啊已经做完了,我看看啊,CD杠,OPT model ma ma啊进来。
27:46
好,这已经变成了config property了,那我们进来看看吧,Vm config.proper。OK,那进来之后我们看一看啊,首先要修改哪些内容呢?哎,首先第一个Maxwell发送数据的目的地,可选的配置有,哎,这么多啊,刚刚有同学他就问了这个Maxwell除了red啊,除了这个卡夫卡,他还能发送到哪呢?它还能发送到这么多个地方啊,你看std out,这是什么呀?是不是标准输出啊啊。
28:22
File呢,写入到文件啊,就是卡夫卡key这些,哎,等等等等,这些都是什么呢?啊这些啊,他们都是这个跟卡夫卡类似啊,都是流数据的这个处理平台,那你像这个rabbit MQ是不是也是一个消息中间键呢,只不过它是给这个一般呢Java会用这个啊啊。做Java后台的,然后才有red,它也能写,哎能发送到这么多地方,那如果说我们想要给它发送到卡不卡怎么办呢?哎,这个producer我们给它等于一个卡不卡啊,那到这我们是不是就能知道了。他为什么能往卡夫卡里写数据啊?
29:03
原因,它实现了一个卡夫卡的生产者。那现在我们是不是就明白了,那以后我们可能要自己实现一些功能的话,哎,我们你比方说我们要往卡卡写数据,那怎么办?我们就实现一个卡夫卡的生产者就完事了啊啊来吧,那接下来我们要往卡夫卡写,我得知道往卡卡的集群呢,啊这的卡普塔不塔是抓斯斯,哎哈,1029092 1039092,哎写两个就可以啊,没有必要全都写,那再来。目标topic啊,什么意思呢?我们这个要往卡花写数据啊,我写到哪一个topic呢?啊,那topic的配置啊,在这也有两个方式,一个是配置一个静态topic,什么意思呢?我就这写一个topic,我直接往这写就完事了,那这还有一个方式配置动态topic,那动态topic有什么用呢?你看啊。
30:05
他就说了可以通过百分号database和百分号table,哎,这个意思吧,啊,通过百分号database,百分号table,那它能干嘛呢?你看啊,我上面,嗯,我们这个地方是不是有一个Maxwell的输出格式啊,在mawell的输出格式这就有一个database和table啊,我给他截图拿过来。哎,这样啊。给他截个图,拿到下边。你看在这个地方。百分号database就是获取我们数据当中的这个database,哎,给他拿过来,那百分号table呢,就是获取我们Jason当中的这个表,哎,给它拿过来,最终啊,我们可以用库名和表名,哎,动态的给我们拼接一个topic,那也就是说在我们卡夫卡集群当中。
31:06
啊,这个是卡不卡。那卡法解决,每一个表我都给你创建一个topic,哎,每一个表都给你创建topic,那这个什么时候用呢?如果说我们有这种需求的话,那么我们就这么干,那没有这个需求怎么办呢?我们直接就给他来一个静态的topic就完事了啊,你看这样直接就来一个静态的topic就完事了啊好。但大家要知道啊,这个地方是可以动态配置的,再来那接下来my circle相关的配置什么意思啊,你看我们这个Maxwell啊,它得怎么的,是不是它呢,需要往MY上来写一些内容啊,啊写什么内容呢?Maxwell哎,它呀也支持断点续传。哎,Maxwell它也支持断点续传,那它这个断点续传断点存在哪呢?哎,就是存储在我们的my circleql上边,所以说我们要把刚刚的这个maql的地址以及用户名和密码啊,哎,给到这个maxwelll配置上啊,同时要给到这个maxwelll用户啊,为什么要给他呢?因为这个用户具有组成复制的这么一个权限啊OK,好,那接下来我们呢,就把这个配置啊给他拿回来。
32:29
把这个拿来那修改吧。是生产者是卡夫卡啊,这个不serve,我们给他改一下。右键粘贴啊,那再有我们还要给他一个topic。卡不卡,透明。啊,CTRLC拿回来在这右键粘贴。好过来了,那接下来这个我们也配置一下啊host。
33:04
好多漂零二。用户名、密码。哎,都是Maxwell这些没问题没问题,然后呢,我们再给他一个这个哎时区相关的配置啊啊右键粘贴OK,那到这mywell我们就配置完了。
我来说两句