写点什么

《MySQL 自传》

  • 2022 年 9 月 05 日
    浙江
  • 本文字数:4570 字

    阅读完需:约 15 分钟

《MySQL自传》
作者:斗战胜佛 叶正盛


撰写本文查阅了大量参考资料,也得到很多朋友的指点帮助,特别感谢:

  • Jimmy Yang——阿里云数据库研究员,原 Oracle InnoDB Architect.

  • 彭立勋——华为云数据库总工程师,MySQL ACE Director,MySQL 中国用户组创始成员之一.

  • 谭宇——玖章算术首席架构师,原阿里巴巴技术总监,数据库智能运维研发负责人,OceanBase 创始团队成员.



「初出茅庐」


我是一只勤劳的小海豚,网名叫 MySQL,出生于 1995 年 5 月 23 号,正宗 95 后,你们可别小看我,我现在可是全世界最流行的开源数据库,全球有 800 万个实例呢。



Monty


早些年的事情我也不太记得了,只想起爸爸希望我的特长是查询数据比较快,帮他解决一些工作上的事情。Monty 爸爸非常爱我,每天都陪伴在我身边,教我技能,并且看到我每进步一些就取个新代号,真是望女成凤啊。记得 6 岁那年,我还是个丑小鸭,代号是 V3.23,开始有人认识我了,感觉我小巧可爱,不像有些前辈(Oracle)那么古板,他们虽然经验非常丰富,但请他们干活得准备个半天,并且贵得要死。我到处打黑工,基本不收费,并且把我的做事方法开源了,很多人开始帮我改进,感觉自己进步神速。


「剑露锋芒」


记得到 2005 年,我 10 岁,已经进化成 V5.0,以前只会从表格里查查资料,我现在开始学会了不少高级技能(如:视图、存储过程、函数、触发器),而且我还把内部资料整理在叫 information_schema 的仓库,让大家更了解我,很多高级的事情他们可以查询仓库自己干了,我第一次懂得与其他人协作完成事情,因为我学会了分布式事务(XA)。虽然自己学会了很多技能,但是总是毛手毛脚,爸爸天天帮我擦屁股(bug 太多啊)。


直到 2008 年,我 13 岁,进化为 V5.1,才开始大胆出去接客。那时很多中国的小伙伴开始了解我,他们之前一直是请 Oracle 这些老古董,后来互联网业务发展很快,请 Oracle 干活太费钱了,于是和我密切接触。记得新浪、网易、阿里巴巴、百度、腾讯等小伙伴对我都非常热情,我很开心,他们把很多业务交给我来处理,还帮助我提升技能。


压力山大的是阿里巴巴说要把全部业务都交给我负责,他们搞了个去 IOE 的行动,并且还有个剁手节,我很慌啊。每年 11.11 号大家一起剁手,我从来没见过这么多人,尤其是那些姐妹们,根本停不下来,我就要不停记录他们的订单,我感觉我快要撑不住了,你看,她们的手都在这里:


拍自意大利威尼斯剁手商场


“那是 2002 年的第一场雪”,哦,记错了,是 2012 年的 11.11 号 0 点,我算彻底崩了,休息了 30 分钟才缓过来。小伙伴知道我压力太大,撑不住,于是自己再找了中间代理商帮我分担压力,那时中间商很多,Vitess、Cobar、TDDL、DDS、MyCAT 等等,中间商给我的活一般比较简单,每次只要拿很少的数据,压力瞬间小了很多。


「意中人」

我打小一直和 MyISAM 哥哥搭配,虽然很多时候都干得不错,但是在遇到要同时干几件事情的时候,他就力不从心,为了避免出错,我只能让他一件一件干,客人感觉我们效率不高,我也非常烦恼。


后来有个叫 InnoDB 的小伙子主动来帮我,我太开心了,当很多活过来的时候,我慢慢开始推荐 InnoDB 哥哥处理了,他确实不错呀,可以几件事情同时开工,从不出错。我慢慢爱上他了,但是我一直放不下 MyISAM,直到 2010 年,我摊牌了,正式和 InnoDB 哥哥在一起,开始新的生活,和 InnoDB 磨合一段时间,越来越融洽了。


到 2013 年,我刚满 18 岁,代号升级为 V5.6,InnoDB 也更强大,效率提升了 2 倍,另外我还把很多运行数据记录在 performance_schema 了,遇到问题可以很快诊断原因。现在全世界的程序员都喜欢我,还有很多 DBA(数据库管理员)把我做事情的方法研究得非常透彻,持续给我改进意见。我已经不是当年的丑小鸭了,AWS、Facebook 这些土豪们也喜欢和我合作。


「独门秘籍」

从小爸爸教了我一些独门秘籍,我感觉自己虽然内功不够,但是招式很牛,初学者都非常喜欢,我给大家介绍几招哈:


一、主备分身术


所谓分身术,就是主备可以同时处理事情,这可是我的拿手绝活。



我可以瞬间变出一个分身,甚至是多个分身,当事情很多的时候,这些分身可以一起上,那效率杠杠的。我的分身术在互联网圈子太实用了,可以秒秒钟搭起读写分离架构,不要太爽。


而那些老前辈的分身术比较老套,他们通常是一个人单打独斗,偶尔也培养个分身,在自己扛不住时候换分身顶上,平时分身都是在一旁看着。后来他们也学习我的分身术,但总感觉是照猫画虎,哈哈。

不过 Oracle 那个老家伙功力深厚,有本 RAC 秘籍,说非常牛,我一直没有学会。


二、秀外慧中掌(SHOW)


在我这里,可以用 SHOW 方法查看很多内部资料,如分身、库、表、视图、函数、用户、帮助,啥都可以 SHOW 出来,一展芳容啊。DBA 们特别喜欢这些招术。


show slave status; # 查看分身(备库)状态show processlist; #查看当前连接信息,可以看到当前谁在访问我,还可以看到当前运行的慢SQL了show databases;  #查看数据库列表 show tables; #查看表列表show create table t1; #查看表定义 show grants for user1; #查看用户有哪些权限show engine innodb status; #查看innodb运行细节,什么死锁、内存信息都在这里了
复制代码


而老前辈们总是把自己那点东西藏着掖着,根本没这项技能。


三、翻页神器


大家搜索信息的时候,经常会如下翻页显示



我的翻页神器就是专门干这个事情,非常厉害,看招:


#MySQL使用limit的分页语法,查看从第90条开始的10条数据select * from user order by name limit 90,10
复制代码


那些老家伙是下面的打法,实在是丢人,三招打完,感觉还是云里雾里:



#Oracle使用rownum分页语法 select * from( select rownum as rn, a.* from user a order by name where rownum<100 ) where rn>90
复制代码


后来 SQL 标准组织老大爷们搞了个新的分页语法,如下是做的样板,你看懂了吗,反正我看了后感觉要头晕,记不住啊。



好了,我的独门秘籍还有很多很多,以后再娓娓道来,接下来讲讲我的几次重大变故。


「嫁入豪门/背井离乡」


我家本来在瑞典的 MySQL AB,在美国也有一些伙伴。2008 年,美国硅谷有个叫 SUN 的土豪盯上我们家,说要给我们 10 亿美金发展,家人们没有经得住诱惑,于是我们就搬到 SUN 的地方。SUN 家大业大,他们老大叫 SPARC(一种精简指令集 CPU 架构,和 Intel 是对头),老二叫 Solaris(一种 UNIX 操作系统,老古董了),还有只赚吆喝不赚钱的 Java,虽然家大业大,但总感觉是虚胖,不是一般的虚胖。很快,到 2009 年,大土豪 Oracle 前辈用 74 亿美金把 SUN 买了,我的天啊,我在 SUN 家人还没认全,又要搬家了。


到了 Oracle 后,我终于和 InnoDB 哥哥团聚了,InnoDB 在 2005 年就搬到 Oracle 家,一直和我眉来眼去,这次算是有情人终成眷属(其实我之前还有个初恋 BerkeryDB 也在 Oracle 家,不过那都是过去的事了)。


难过的是我爸爸 Monty,他是开源斗士,非常不喜欢 Oracle,和我们分道扬镳。他自己回到芬兰,培养我妹妹 MariaDB,其实到 SUN 家的时候,爸爸就感觉不可能和我永远在一起,开始花时间在 MariaDB 上。看,下面是我姐妹俩的靓照,MariaDB 妹妹和我是不是很像啊。



爸爸希望我不要在 Oracle 家里受欺负,如果 Oracle 不要我了,我还可以和 MariaDB 住到一起。现在 MariaDB 也自己出来工作了,有时我们还会 PK 下,但是我更希望她快快长大。爸爸年过花甲,最近又去中国见老朋友了,还说要陪妹妹工作到 100 岁,祝福他老人家,越活越年轻。


我一直在钻研分身术,很早的时候分身只会模仿我的口令行事(Statement 模式)。到 2008 年(V5.1)的时候,我把法术细节(Row 模式)传送给她,她就可以自己灵活发挥了。 到 2015 年,那年我 20 岁,我也升级到了 V5.7,分身更厉害了,以前分身在我非常忙的时候,她有点跟不上,现在我们信息可以并发同步,她已经完全跟上我的节奏。那时业界还流行了 JSON(把 XML 打趴下的),于是我也悄悄的学会 JSON,还有那个地理空间技术,都是在我 20 岁练成的。另外 InnoDB 也修炼了动态调整内存技能,对内存使用可以像孙悟空的金箍棒一样,说大就大,说小就小。


Oracle 一直在给我酝酿 V5.8 的代号,都要昭告天下了,我感觉自己进步很大,V8 更符合我的气质提升,于是 2018 年,我决定从 V5.7 摇身变为 V8.0 代号。MyISAM 哥哥实在对不住啊,我感觉要彻底离开你了,V8 的我已经和 InnoDB 全面融合,我的机密小仓库(元数据)都是 InnoDB 的了。我还学会了窗口函数、CTE 语法,可以说在数据分析和复杂 SQL 处理方面如虎添翼。我正在修炼 Hash Join(一种比较高级的算法,前辈们都非常熟练),不过还是初学阶段,大家见笑了。


「名人烦恼」


因为我在业界小有名气,据探子回报,有 31 位江湖新秀在修炼我的招式,OceanBase、TiDB、TDSQL、SequoiaDB、ShardingSphere、Vitess、HotDB,另外还有 AWS 的 Aurora、阿里云 PolarDB、华为云 GaussDB 等等,他们都说比我强大,学会了分布式和云原生的武功秘籍,另外还在修炼 HTAP 神功。我的天啊,我比较怕怕,更不知道如何还击,但是“我还是我,不一样的烟火”。


我对大数据处理不太擅长,不过有些新人这方面天赋异禀。比如最近有个俄罗斯出生的 ClickHouse 小朋友很出名,他也模仿了我的一些招式,我挺看好他的。中国还有个叫 Doris 的小弟弟也从我这里学了一招半式,据说拽得不行。我们自家刚出生了个 HeatWave 的弟弟,也有数据分析的天赋,不过他很少出门,一直住在我家云里面,现在家里人都围着他转,希望他快点长大。


我也不知道未来会怎么样,那些 NoSQL 的同行总在挑衅我,包括 MongoDB、Redis、Nebula Graph、TDengine 等等。最近 10 年大家都开始搬到云上生活,感觉在 Oracle 这里很分裂,我们家那朵云好像不温不火。最早家里不让我住到云上,反而 AWS、阿里云他们把我当头牌,早早把云上天之一号房间给我,我也给他们赚了上百亿现金,真是投桃报李啊。我是墙里开花墙外香,你懂的。


其实我到 Oracle 家一直都不太受待见,感觉像个小妾,担心我抢正房的风头,外界总谣传 Oracle 买我只是为了得到我。InnoDB 哥哥一直在鼓励我活着,我们也是互相依靠了,毕竟如果我没了,他肯定也活不下去。我虽然一直在升级,但也不知道 V9 啥时候发布,因为现在大家都在上云,所以我的核心任务也是在云上站稳脚跟,其他事情都顾不上了。


我还有个叫大象(PostgreSQL)的死对头,其实她是 70 后,叫她大姐估计会拿刀砍我。她在十几岁的时候家里发生了一些变故,后来迷上了面向对象的法术,以为那是绝世神功,最后没练成,不了了之,还留下了一堆废铁,现在算是回归正道。她是大学老师的好学生,学霸类型,什么都懂,号称最强大的开源数据库。我感觉懂是懂,但真正干起来没有我靠谱,所以我也就不和她计较了。不过她比我还开放,有很多朋友,近几年也进步神速,中国还有个 openGauss 兄弟和她很好,也许会青出于蓝胜于蓝,我还是要当心点。


轮到我做核酸了,今天就和大家聊到这里啊,下次空了再叨叨,还是在公众号《云数据库技术》老地方。我现在家里地位急待提升啊,如果你在使用 MySQL,记得帮我点赞和转发哈,我家还有几件珍藏的 MySQL 练功内衣可以送出。


「作者简介」


我的老熟人,名叫「斗战胜佛」,他在我 6 岁(V3.23)就认识,研究了二十年的数据库和云计算,擅长十几种武功。最近他和一群大牛在研究《玖章算术》,是中国古代一本非常牛逼的武功秘籍,后来李淳风、张苍、刘辉等人都练了并修订过。他们在 SQL 开发、数据复制、数据备份等方面又有新突破,这些武器都是我非常需要的,毕竟程序猿和 DBA 是咱衣食父母,说不定哪天可以带我腾云驾雾呢。他的研究进展计划放在 https://www.9z.cloud 密室,一定要去探探。

用户头像

最新的互联网技术资讯、技术动态,前沿科技 2020.10.26 加入

搬砖小能手,自媒体分享。

评论

发布
暂无评论
《MySQL自传》_MySQL_阿里云情报局_InfoQ写作社区