00:00
好,那么接下来的话呢,咱们讲一个新的概念呢,叫做数据库的一个迁移啊,一说到这个迁移的话呢,可能有同学会联想到一个词呢,叫做迁徙啊,就像这个非洲的大草原当中啊,有好多这个动物呢,随着这个季节的一个变化呢,他们会有一个迁徙的行为是吧?诶有点类似啊,这里边儿我们说的数据库的迁移呢,是指的呢,将数据从一个计算机存储系统永久性的传入到另外一个计算机存储系统的一个过程。啊,就叫做迁移了,那比如说呢,诶我们因为什么原因造成的呢?有这个服务器呢,或者存储设备的一个更换了啊,维护和升级啊,这个灾难恢复,还有这个数据中心的一个迁移等等这样的一些情况呢,导致我们要做这样一个迁移的操作。那实际上呢,这个迁移操作一个本质呢,就是我们前面讲过的这个备份和恢复的一个过程,只不过呢,这个侧重点呢,可能有点不同啊,你比如说我们这样的一台这个服务器呢,我们把这个呃备份的数据呢,给它这个备份出去,然后的话呢,我们再把它,呃这个可能数据做一些损毁了啊,我们再把它恢复回来,诶这个过程呢,我们就要备份和恢复是吧,但如果说你现在呢,是针对的这样的一台这个服务器呢,把数据呢,给它备份出去以后呢,恢复的时候呢,我们恢复到其他的这样的这个主机上了,诶我们可以理解成这个呢,是一个数据的一个迁移的过程,就稍微这个侧重点有点不太一样,但是本身实现的这个逻辑啊,都是一样的啊。
01:17
呃,那在这个迁移当中呢,我们可能会涉及到一点呢,就是退役原来旧的这个,呃,这个存储设备啊,这个呢是需要注意的,前面这个呢,去验证这个迁移数据的这个完整性呢,这个我们前面的备份恢复和这个迁移呢,都会涉及到。那么具体的迁移方案啊,这就没啥说的,这不就是我们前面这样一个过程吧,物理的一个迁移啊,物理的一个备份逻辑一个备份啊,这样个情况。嗯,下边这个迁移的方案啊,这个咱们前面都已经提到过了啊,就不多说了,然后的话呢,我们说迁移的这个注意点啊,这块呢,我们稍微的关注一下,第一个的话呢,就是针对于我们相同数据库版本之间的一个迁移。啊,相同数据库版本之间一个迁移,这个的话呢,问题呢就会少一些,这里边我们所谓的相同版本呢,是指的这个主版本号呢,它是一样的啊是一样的,嗯,这里边呢,要注意的点呢,就是咱们前面讲这个物理备份的时候也提到了针对的啊,只能是这个MY这样的存储引擎的表是吧,DB这样的表的话呢,就不适合我们的个物理的一个备份,或者叫物理的一个迁移了啊这个注意一下。
02:15
然后呢,哎,推荐呢,去使用my soup是不是我们前面都说过了哈,就不多讲了。然后第二问题的话呢,就要不同版本的数据库之间的一个迁移,注意点,诶不同版本的话呢,诶这个我们一般的话呢,你要是从这个低版本往高版本这块做迁移都还比较好,比如说呢,从5.7呢迁移到这个8.0啊一般的话呢,我们说这个数据库呢,都是向下兼容的啊,你把这个呢,备份的文件呢,呃,这个相当于在我们这个高版本的数据库服务器上做一个恢复啊,一般的问题都不大。但是呢,就怕你反着来啊,我们这儿呢,是一个8.0的是吧,诶这个呃数据,然后呢,你把它呢备份出去以后,然后呢,这个数据中心呢,迁移到另外一个这个这个城市了,然后结果呢,他用的这个数据库的版本呢,比较低啊,比如用的5.7啊,这往往呢,中间会有很多的坑,因为呢,我们高版本呢,通常会解决低版本的一些缺陷啊,会做一些修正,那你高版本导出的这个数据呢,在低版本当中可能就不一定兼容。
03:09
啊,你举个简单的道理,我们在5.7当中呢,提到了默认的字符集呢,是拉丁对吧,8.0中呢,我们就改成了UT8MB4了。那如果说呢,你这5.7呢,也没有去修改过这个字符集,而且呢,我们八当中呢,还有这个中文,那你要导到5.7当中,这不就报错了吗。是吧,诶那你必须在这个迁移的过程当中考虑到这样的一些呃不同点,然后呢,提前呢,对这个低版本呢,先做一些修正,然后的话呢,你再去导啊,诶当然推荐的话呢,我们肯定呢,是不是要尽量的达到相同版本之间做一个这个迁移是会更好是吧?好,然后这个呃力度呢,我们再高一点啊,不同的数据库之间去迁移了,那这个坑呢,是不是就更多了。诶,不同的数据库之间啊,我们说他们之间的差别呢,是非常大的啊,就好比是呢,咱们这一套课程呢,给大家讲的是MYSQL的高级课程,然后呢,里边呢,针对的各种的优化呀,策略啊,咱们也是基于MY的,但你要说这你要说这个Oracle呢,是不是适用呢?有一些适用,但是也有一些呢就不适用。
04:08
对吧,哎,就这样一个情况啊呃,那不同的数据库之间呢,我们提到像关键字也不一样,我们这个SQL语句呢,写法呢也也不一样啊这个呢都是坑,那怎么办呢?呃,如果呢,你像我们这个MY跟Oracle之间呢,要做这种迁移呢,可能还好一点哈,毕竟呢,MYQ呢,现在已经被这个Oracle收购,已经这个这个有些年头了是吧?诶那它相应的对这个SQ的支持呢,还是比较像的啊,还是比较像的,虽然说有一些这个数据历程上呢,也会有一些区别啊诶ver呀,它叫ver two啊是吧等等的,哎当然我们可以呢,呃,这个导出的这个SQ文件呢,我们手动的去做一些调整修改啊,你可以呢,就实现一下诶到诶Oracle这个数据库的一个,呃这个恢复了是吧,就是这块呢,针对的这个数据库呢,他们可能差别不太大的这种场景啊。那么呃,有一些数据库之间呢,它这个差别呢,就会比较大啊,这块呢,就提到了他们可能是故意造成的这个技术壁垒。
05:00
啊,就是对大家都好是吧,哎,你让他用的话呢,尽量都用,就像呢,咱们现在国内的这个,呃,通信的这个公司一样,移动啊电信。联通是吧,嗯,你要是买一个手机号,那当然其实你看现在会发现你换一个手机号的成本呢,是极高的,你像我们这个各种的这个京东啊,淘宝啊,美团呀,是吧,还有这个各个银行的呀,你是不是全用的这个手机号,你说呢,你这个号不想用这个移动了,感觉信号特别差,或者收费呢不合理,你想着迁移到其他的这个运营服务商。你根本就不不敢去签是吧,啊那那那怎么办呢?你只能是忍着。或者说你会发现他好多这个运营商呢,他对于这个新用户呢,都非常优惠,你要是个老用户了啊,然后这个呢,月租的这个成本呢,可能还挺高的啊,然后呢,你这个套餐呢,可能还不太这个这个合适啊,那国家呢,就出面相当于要求呢,是不是必须呢,得转号得是非常顺畅的啊,呃,就是跟我们这一样啊,就是如果没有国家去干预的话呢,他们肯定是希望呢,呃,故意的营造一些这种技术的壁壁垒啊。
06:01
嗯,当然这里边呢,也会有一些具体的工具啊,可以去帮我们协助的去做这个事啊,比如提到叫myc,还有那MY呢,官方提供的这样一个工具啊,可以考虑去做这样事啊。呃,一般呢,反正不同的数据库之间去做牵引的时候呢,一定得有这个高手专门的去指导着去实现啊,因为里边的坑呢还是比较多的啊,这个大家注意一下啊,这呢我们就没有办法呢,给他完全去展开去讲这个事儿了啊。下边这块呢,对应的是一个迁移的小结,我呢从物理迁移和逻辑迁移的角度呢,进行了一个刻画,这呢我们就不展开呢进行说明了啊,也比较简单,大家看一看就可以,接着的话呢,我们看下一个问题叫山酷了,不敢跑能干点啥?不敢跑或者不想跑,类似的这个道理经常呢,我们在网上看到一句话,说从山库到跑路是吧,有时候呢是一个调侃,但是实际情况的话呢,确实我们难以保证,咱们呢,你说恶意操纵哪可能不至于,但是呢,呃,这个无意的,我们去删除了一些不该删的数据,这个呢是有可能出现的,所以呢,常在河边走哪能不湿鞋,那真正出现这样的行为,我们该怎么办呢?哎,我们下面来聊一聊。
07:08
首先的话呢,我们说传统这个高可用的架构啊,是不能够去预防我们误删除数据的,你比如说我们进行了一个drop table这样一个操作,那么我们很快的会通过这个blog的方式呢,传递给我们所有的这个存库啊,接电的存库,那导致了我们这个存库当中呢,是不是把相应的表也都删掉了,那这呢就非常恶心了,对吧?啊那怎么办呢?啊,这时候我们说要想解决这些问题啊,我们首先呢得分分类啊,不同的问题啊,我们有不同的解决方案,我们呢,删除操作呢,从这样的几个角度呢,来进行一个说明。好,那下边的话呢,我们来看一看,首先第一种叫做delete这样的行为,Delete的话呢,我们说影响的范围啊,应该是比较小的。啊,而且呢,我们恢复起来呢,也是比较容易的,那措施的话呢,通常我们就使用一个工具叫做flash back这样的工具,大家呢,进行数据的一个恢复就可以了,这个工具的话呢,我就不在这呢去做一个演示的啊,大家有这样诉求的话呢,直接呢去拿来去操作就可以了,比较容易上手,那这儿呢,我们主要呢,想说一下这个工具的一个原理,它的主要原理的话呢,其实就是修改我们这个blog的内容,当然前提呢,就是我们b log当中当中是不是记录了你具体的删除的一条一条的数据啊,所以说我们这个前提的话呢,就是这个form呢,我们需要呢是一个肉,包括呢,我们这个参数呢,是一个for。
08:17
啊,在这种场景下的话,我们把呃拿回你相应的呃删除这个操作呢,呃一些这个指令,我们把它呢做一个回放就可以了啊你比如说呢,我们这时候呢,是做了一个底delete的一个行为了,对吧?啊那这时候我们需要呢,把它是不是改成这个insert,然后把它再加回去就可以了。啊,有点类似于我们前面呢,是不是讲过这个叫安度日志啊,哎,这样的一个思路啊,那如果说呢,你误删除这个数据呢,涉及到了多个事物啊,这个时候呢,该怎么办呢?比如我们这一个事物,这个事物,这个事物相应的有一些这个比如说update呀,Delete呀,隐色啊这样的一些行为,那怎么办呢?你是这样来执行的,那么我们在恢复的时候呢,是不是就反过来呢,去操作就可以了呀。啊哎,比较简单啊好,那这呢就是针对我们这个delete一个措施,那我们说呢,重点呢,还是要有一个预防,怎么能够预防呢,代码在上线前呢,我们必须要进行SQL的一个审查啊,确保的话呢,我们里边没有相关的一些不是你主动啊要删的这样的一些行为,那么第二的话呢,我们可以呢,去打开一个安全模式,防止呢我们误删除一些比较多的数据。
09:17
这里边呢,涉及到我们这叫circle safe updates,我们把它呢设置成是个on,那么设置好以后的话呢,当我们再去进行删除行为是吧?操作的时候呢,它会强制的要求我们去加一个V尔条件啊,注意这个外耳条件的话呢,不是说你加个外耳条件就可以了,要求你这个条件中的这个字段呢,必须得是有索引的,这个呢,诶我通过这个官网呢,诶我就不去翻官网啊,通过这个官网的话呢,特意确认了一下啊,就是要求我们这个V呢,一定这个字段呢得有索引啊,实际呢,我也拿代码测试一下,没有索引的话呢,也会报错。啊,如果说你要是没有这个where,那怎么办呢?那你必须呢去使用这个limit啊才可以,那如果说我就是这个where,这个没有,然后这个limit的话呢,我也不想写,那怎么办呢?诶如果说这个时候的话呢,你是参数为on的,那你可以写一个呢,一定满足的一个条件也行,比如说我们这个A塔大于零。
10:04
对吧,ID上面有索引,然后我们所引所有的这个ID呢,都大于零,那你就外ID大于零,相当于呢,也满足我们这样的一个要求了,对吧,那就相当于呢,你确实呢,是不是想删除这个所有的数据了。OK,行,这呢就针对我们这个delete这样的一个行为,然后下边的话呢,这个叫tnket或者叫drop,它为代表的话,就是我们这个叫trumpnket table drop table,或者我们叫job database啊力度呢稍微的大一点,把整个这个数据库给删掉了,对吧?那么我们说呢,这个delete的这个操作呢,是比较慢的,如果说我们这个表中的数据啊,都不想要了,你要是用delete的话呢,它还会生成相关的回滚日志啊,写这个锐度,写这个blog,那如果说呢,我们要使用这个窗K的话呢,这个相应的性能呢,会有所提升。啊,那你这要是用这个NK的话,那怎么办呢?首先呢,我们要说明你要是用窗NK或者job这样的行为,我们用flash back呢,是恢复不回来的啊,因为呢,我们这样的三个操作呢,它会呢使用这个b logg呢是statement这样的一个格式,那statement你想想它只是记录我们这个语句了没有呢,是不是我们每一条删除的这个数据呢,是没有给我们去记录的,所以我们就没有办法去恢复了。
11:10
对吧,这个大家应该能明白吧,你像我们这个表中的,比如在这一时刻,咱们呢,有100条数据,然后呢,你接入来一个窗nket啊,它呢,不管你之前是用的肉模式还是什么模式,它会自动的改成呢,是叫STEM的模式,只记录了你这样的传给你一条语句,把这个数据就全干掉了,那你说你咋恢复。是吧,哎,肯定不行,那怎么办呢?要想恢复这个时候呢,你一定得恢复,呃,想到某一个节点,在那个节点上呢,有一些数据,然后呢,你接着呢,去找我们这个blog日志啊,你去恢复到你当前这个场景才行,这就是我们下边提到的这个叫全量备份加上增量日志的方式,实际上也非常容易的大家想到啊。呃,那么这个前提是什么呢?前提你是得有备份啊,你得有备份,你有备份的情况下呢,我们再配合那blog就可以搞定了。比如说我们呢,这个下午三点呢,这个比较困是吧?啊也没喝咖啡,然后导致呢,一个误删除窗了,或者叫drop了,怎么办呀,这是我们取最近的一次全量备份,假设呢,我们是一天一倍啊,而且呢,备份的时间呢,是当天这个凌晨两点,那首先呢,我们把凌晨凌晨两点这个这个备份呢,我们先拿到,拿到以后的话呢,我们在这个基础之上啊,首先呢,你把这个全量备份呢,恢复到一个临时库,注意先不要呢马上把它恢复到这个主库。
12:21
那有可能你接下来这个操作如果失误了,把这个主控呢,相当于进行一个二次破坏了,对吧,现在恢复一个临时库,然后的话呢,再取出我们这个凌晨两点之后,一直到你下午三点这个时间段之内的这个叫b log日志。然后呢,剔除你这个误删除的这个操作的语句,你把其他语句呢,在我们这个全量备份的基础上呢,做一个恢复就可以了。前面呢,我们也讲过这个b log该如何呢去恢复,对吧,最后呢,我们把这个数据呢,再恢复到我们这个主库就OK了,行这呢就是我们说的这样的一种方式,OK,当然呢,具体一个操作呢,我就不在这去演示了啊,只提这个方案,OK。然后呢,这个下边呢,我们再来谈一谈,针对于这个窗和job这样的行为呢,该如何呢去预防,这呢我写了三个点,第一个叫权限分离啊,就是避免呢,我们做这个事儿的前提呢,就是说我们根本没有这样的权限。
13:07
啊,这个呢,都很好理解啊,轻易的我们不会去分配相关的这个写的权限,如果呢,要想呃是一个实施的话呢,我们必须呢,需要有相关的这个审批,比如呢,业务的这个开发人员,这个DMMR这个权限啊有,但是呢不给他这个窗和job的权限,D边呢成员也类似。然后接下来的话呢,就是不同的账号呢,我们给他呢,来设置不同的一个权限的,进行一个权限的一个分离,避免呢一个账号呢,可以删除所有的库。啊,还是从这个权限的角度呢,我们进行一个限制,第二的话呢,我们就是制定相关的一个操作规范,你不是容易误删除吗?哎,那我们这时候呢,先不让你去删,你先把这个表呢,名字呢,比如说改一下,改完之后的话呢,相当于我们就啊相关的一些词后语句呢,就不依赖于你,呃,就改名以后的这个表了啊那你看看这个表呢,它还有没有价值,如果没有价值的话呢,那这时候我们后边呢再去删掉。啊,就好比我们衡量一个公司当中一个员工的一个价值,就比如说大家你想想你的价值有多大呢?啊假设呢,你比如说两天没来,你发现那公司运营的特别好,没有你反而更好,那完了,那你可有可无是吧,甚至说走了以后更好,那如果没有你之后呢,整个公司不赚了,那你的价值显然是非常大的,那这个呢,就来源于这样的一个思想是吧,那这时候我们起名的时候呢,你可以呢,有这个建明之意的一个效果啊,Tobe deleted啊一看呢就知道啊这个呢,是将要被删掉的这样一个情况。
14:23
好,那么第三个这样的一个措施呢,就是设置延迟复制备库啊,那我们可能一开始的想法说呢,呃,咱们主从这个复制的时候呢,尽量呢,是要减少这个数据的不一致性的状态啊,达到这个一致性,减少这个主从的延迟啊,但是呢,我们说在一些场景下呢,我们还要呢,故意的去延迟复制这个备库。啊,就比如我们现在这样一个场景,比如说呢,我们这个相关的这个主库啊,我们要求呢,他一个小时以后,他再把我们这样的一条操作呢,去做一个备份啊,做一个同步的一个操作,那么如果说呢,我们这时候呢,有一个误删除的操作了啊误删除这个操作呢,一个小时以后呢,它才会是不是传递到我们这个备库或者同步上,那你在一个小时之内呢,如果发现了这时候呢,及时的把我们这个slave啊,Stop slave先断掉,断掉之后呢,我们先拿到我们这个,诶从库或者叫备库里边这个数据啊,因为你这时候呢,还没有删啊,这个主户已经删掉了,这时呢,我们就还有这个表。
15:16
对吧?哎,接下来我们做恢复呢,就非常容易了,此时的话呢,我们可以通过相关的这个参数啊进行这个设置,这个N的话呢,代表的是秒,比如我们要是写三千六呢,代表的就是一个小时。OK,那么我们设置这个叫延迟复制备库,还有哪些其他的一些好处呢?除了我们这里边说的这个能够防止你去删是吧?哎,恢复呢,更方便说呢,还可以用来做这个延迟测试,比如你就想看一下,说我们进行读写分离了,然后我们现在写的啊,看到是这样的效果,我们想看一看这个,这还没有及时的这个传递到我们这个重复上啊,这时候呢,查询是什么样的效果呢?你可以设置这个叫延迟备库。啊,延迟这样的一个备控啊,这呢是我们说的这个点还可以呢,用于这个叫老数据这个查询这样的一个需求,比如我们这呢,诶夸张一点,我们说这个一周啊,一周以后,哎,我们这个数据呢,才会做一个同步啊,这时候呢,你想看一下这一周之前的数据的一个场景,这时候我们就可以查看这样一个延迟备库,OK。
16:12
好,这个呢,一说呢,大家都能明白啊,然后最后呢,通过这个RM的方式呢,我们相当于把整个麦库的实力给干掉了啊,看呢影响是最大的啊,但是这种情况呢,反而我们是比较容易解决的,因为对于呢,高可用的这个麦斯库集群来讲,我们只是干掉了其中一个节点中的实力实力,那我们呢,把这个节点呢,退下来之后呢,呃,其他的这个节点补充上去,这个节点呢,我们做一个数据的恢复,恢复完以后呢,我们再接回去就可以了。啊,所以这个呢,影响其实并不大啊,哎,我们这个高可用这个系统呢,都做了相关的一个方案的处理了。呃,那么如果呢,你要是恶意的把整个集群要进行删除的话呢,那这个就比较麻烦了,那这时候我们需要确保的就是你整个集群的数据呢,最好不要在同一个地方啊,比如我们要跨机房进行备份,跨城市进行备份是吧?就可以呢,诶尽可能的减少这样的一个损失。好,那么这样的话呢,咱们就把整个这一章关于数据的一个,呃,这个备份,这个恢复啊,迁移啊,包括我们最后谈的这样的一个误删除,怎么去恢复啊,这样一个行为呢,我们就讲完了,整个来讲的话呢,这一章呢,应该是满足不了大家在实际当中啊,像DBA的一些诉求的啊,包括我们刚才讲的时候呢,我也没有给大家一个个的去做这个演示啊,呃,大家呢,在实际工作当中,其实呢,还需要呢,很多相关的一些知识啊,以及呢,我们就要具体问题具体来分析。
17:30
啊,这个呢,一定是需要经验的一个积累的啊,不是说呢,我们把这一章讲完之后呢,就OK了,对吧?呃,另外一点来讲的话呢,整个我们这个高级的内容来说呢,呃,咱们在这块呢,其实也不算是这个重心的重心呢,我们其实是偏前边这个第二个死篇章和第三个子篇章啊,然后大家呢,如果能够看到这儿的话呢,啊,能够把这里边呢,讲的所有的内容有一个细致的一个消化吸收,我觉得你的成长呢,应该还是比较大的,嗯,也希望的话,我们这套视频呢,能够真正的帮助到大家啊,实话讲这套视频的画的这个对于我来讲啊,花的这个精力呢,还是比较大的。
18:04
啊,但是呢,如果能够真正帮助到大家,我觉得这个意义呢,也很大啊,好,谢谢大家。
我来说两句