欢迎来到天天文库
浏览记录
ID:37324319
大小:716.75 KB
页数:14页
时间:2019-05-21
《MySQL5.7与8.0新特性管窥》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2016-11-20中国软件开发者大赛演讲主题演讲嘉宾:古雷央视网络DBA古雷MySQL5.7、8.0新特性管窥12016-11-20感兴趣的特性•戏说Groupreplication(5.7)•快速增加列宽(5.7)•TheRewriterQueryRewritePlugin(5.7)•JSON(5.7和8.0)•UUID更好的支持(8.0)Groupreplication•http://mysqlhighavailability.com/mysql-group-replication-transaction-life-cycl
2、e-explained/22016-11-20Groupreplicationcertification•http://mysqlhighavailability.com/mysql-group-replication-transaction-life-cycle-explained/MySQLGroupreplicationpluginhttp://mysqlhighavailability.com/gr/doc/technical.html32016-11-20•三家共同管理山头田地•每家庄主都可以发号师令•犁地、播种、浇水、
3、施肥马砖运韦飞鸽传书飞鸽传书顺序问题与冲突问题•要是鸽子路上贪吃,犁地的命令比播种命令晚到了,种子都被翻出来咋办?•要是两个庄主都发了浇水的命令,浇两遍水,把种子淹死咋办?•天气太干、太热,一个庄主看到浇了一遍水以后,还需要浇。连续两次浇水的命令就是正常的42016-11-20聪明的通讯员(类paxos)最会放鸽子•我们需要把老板们的命令编号,产生统一的顺序•马通讯员:编号序列1、4、7、10……•砖通讯员:编号序列2、5、8、11……•运通讯员:编号序列3、6、9、12……•所有通讯员:–收到消息后,按编号顺序向上汇报,包括本地
4、老板的消息–如果5到了,4没到,不得向上汇报–接上句,如果发现4是我的编号序列,而我由于之前没消息可发,没发过4,此时发出一个空闲命令编号为4秘书最懂老板的心•老板都是有秘书的•三个老板谁也得罪不起,有令必行•但是如果做了老板实际不想做的事,也会吃不了兜走•老板依据他已知的发生情况,发号师令•通讯员已经解决了顺序问题52016-11-20秘书的高招•所有执行过的命令都给一个编号,起名叫GTID•把自己老板的命令,加上当前命令执行的整体状态,一同交给通讯员;这个整体状态起名叫做gtid_executed(如:UUID:1-10,30
5、-36,50-55)•秘书收到通讯员给的消息后,与之前收到的消息比较;后者是否包含前者的gtid_executed–是,准许执行,分配GTID,修改此消息的gtid_executed–否,丢弃–秘书把这个过程叫作认证(cetification)更复杂的情况•实际每个山头有10块地,按0到9编号•秘书做认证工作的时候,把当前收到的命令,只和之前收到的同一块地的命令进行比较•不同地的命令之间不会有冲突•后来秘书把一块地称为一行记录,地的编号被称为主键62016-11-20认证的优化•认证需要比较的命令越来越多,要与以前发生的都比较一下
6、•定期把列表中已经被所有山头执行完的命令清理掉•回忆一下冲突发生的条件–(a)两个山头差不多同时发出同一块地的命令–(b)两个庄主都不知道对方发出的这条件命令•在所有山头都执行完成的命令,就不会满足(b)GR数据库状态机要点•每个事务发给所有节点•在每个节点,所有事务的认证顺序都是一样的,认证顺序由类似Paxos协议保证•每个节点认证的事务可能是本地发起的本地事务,也可能是别的节点发过来的外来事务•本地事务是否允许commit,只看本地认证是否成功•在节点A,外来事务,是否允许在节点A执行,只看此事务在节点A认证是否成功•外来事务
7、,在允许执行前还不是事务,因此需要与本地事务一起进行冲突检测,称为认证72016-11-20认证(Certification)的理解•事务Ta,事务Tb,更新(增、删、改)同一条(主键相同)数据•假设Ta被排在Tb之前•Tb是在『看到』Ta执行结果以后才发起的吗?–是,允许Tb提交(本地事务)或者执行(外来事务)–否,Tb回滚(本地事务)或者丢弃•同一个事务在不同节点上的认证结果是一样的–都成功,或者都失败–因为所有事务在各个节点上的认证顺序都是一样的Groupreplication其他关注点•所有节点的binlog顺序完全一样吗
8、•不会有自增列冲突吗•GTID的顺序是全局由小到大的吗82016-11-20瞬间增加列宽的条件•modifyvarchar(n)tovarchar(n+m),m>0•charsetutf8(满足以下任一)–08
此文档下载收益归作者所有