15
回答
【开源访谈】MySQL 布道师叶金荣:16 年,我与 MySQL 不得不说的事
科大讯飞通用文字识别100000次/天免费使用。立即申请   

DBA 的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高性能。需要具备广博的知识和深厚的技术能力。作为一名 DBA ,其选择数据库时看重哪些因素,需要哪些必要的知识储备,如何系统的学习。本期,【开源访谈】邀请到了知数堂培训联合创始人叶金荣老师,和大家分享他与 MySQL 的十六年。

【本期嘉宾】

叶金荣,知数堂培训联合创始人,Oracle MySQL ACE,MySQL 布道师。有多年 MySQL 及系统架构设计经验,擅长 MySQL 企业级应用、数据库设计、优化、故障处理等。

【访谈实录】

1、嘉宾自我介绍(技术背景、学习经历、工作经历和感兴趣的技术等)

大家好,我叫叶金荣,曾是一名专职的 MySQL DBA,现在主要从事在线 MySQL 和 Python 的培训。2003年毕业,从事 PHP 开发工作大概有三四年,尔后转做一年运维,最后成为专职MySQL DBA。我在2000年还在读大学的时候就已经开始学习 MySQL 了,毕业以来也一直是从事与 MySQL 相关的工作。

2、计算机众多领域中,当初为什么选择了数据库(能否和大家分享从事数据库的经历)

相信大多数的同学都有过这样的经历:读书时期该选择一个什么样的技术方向或技术领域才能保证将来从业一段时间以后依然能保持优势。很多人会选择C/C++ 或者 Java,因为这些语言很不错。

读书期间,我学习了Linux、MySQL 和 PHP ,也曾在 PHP、JSP  和 ASP 之间徘徊,最后有幸选择了LAMP,并主攻 PHP。

之后,在学习和工作的过程中发现MySQL 数据库十分有趣,能帮助实现很多我们需要的东西。在很多企业、项目里,数据库也都是比较核心的一个环节。所以就觉得如果能从事跟数据库相关的工作,也是一个很不错的方向。

至于为什么选择 MySQL 呢?就是它入门非常简单,能帮助我们快速学会并管理一个数据库,而且我上面也说了,我很早就选择了LAMP开发环境,所以理所当然选择了 MySQL 领域,而不是像不少人那样一开始选择了 Oracle。

3、看到老师比较侧重的是 MySQL,MySQL 的分支很多,那么在老师看来存在着哪些问题

我觉得分支都是有历史原因产生的。

(1)官方版本(就是我们通常说的 Oracle MySQL)或者就直接叫 MySQL。

(2)Percona 分支版本。因为当时官方主流版本有一些不太便利的东西,比如说管理功能、参数改写不那么方便,另一方面在性能上存在着一个比较大的瓶颈——并发事务,早期的官方版本限制了并发事务不能超过 1024 。而 Precona 就发现了它的代码有这个天坑,存在着一个硬限制,把它打开后就跑得很快了。这也是 Precona 分支版本出现的原因,它的创始人曾在 MySQL 团队负责性能测试 。我应该也算是国内第一波的使用者吧。

Precona 分支版本除了性能上的提升和功能上的改善之外,还开发了基于 gelera 协议的高可用高一致性解决方案,这就是 Precona XtraDB Cluster ,它能帮助我们快速实现高可用,也是一个很不错的选择。

此外,Precona 还提供了很多开源的工具,例如备份、数据的修复、主从的检测和主从的修复等,这些对于使用者来说都是非常方便的,这些工具统称为Percona toolkit。所以说 Precona 也是一个很好的分支版本。

(3)最近比较热门的一个分支版本是 MairaDB 分支版本,它是 MySQL 之父创建的,我想他应该是担心 Oracle 对 MySQL 管控的太多,无法按照他以前的规划持续做好这个开源产品,所以才决定自己重新做一个 MariaDB 分支版本的吧。

MariaDB 毕竟是由MySQL之父发起的一个项目,也网罗了不少的高端人才和资深的工程师来协助他做一些深层次的开发,它跟官方版本的差异还是挺大的,所以选择 MariaDB 需要有比较大的决心,因为选择这个版本后,想要退回去是比较困难的。而 Precona 基本上是跟着官方做的,所以兼容性会好一点。

关于三个版本之间的选择,正常情况下选择官方版本肯定是没有错的,从 5.7 到 8.0 的发展趋势来看是越来越好了,这不用担心。那除了官方版本之外如果还想选择,我觉得可以优先选择 MariaDB 版本,因为选择 Precona 基本上就是官方版本基础上做了一些修补或者锦上添花的事情,而 MariaDB 则是做了一些比较大的改善。所以想要选择不同的分支版本,可以尝试一下 MariaDB,其次再选择 Precona 版本。

当然,这也要取决于你的业务场景,公司情况是怎么样的,不一定非得按照我的推荐,这个要具体问题具体分析。

4、谈一谈对 MySQL 目前乃至未来发展的观点(对新版本的一些看法、趋势展望)

就是 MySQL 5.7 版本和 8.0 版本,从它的功能描述和未来发展的路线图中,我们能看得到,MySQL 未来发展的主要方向有几个:第一个是实现文档型的存储,就是 JSON,现在已经实现了;第二个是实现高可用;第三个是读可扩展;第四阶段是写可扩展。

所以说现在的发展目标已经非常明确,不再像以前那样,随着社区的呼声才会增加功能。现在 MySQL 版本功能上的设计基本上是跟随着行业的发展,有些甚至是超出行业的发展预期了,所以我认为我们紧跟着官方的步伐就不需要担心。

但是如果有特殊的需求怎么办呢?

第一个是可以反映给我们,我们再去向官方反馈;

第二个是 MySQL 官方有一个 bug 提交的网站(https://bugs.mysql.com),但是除了提交 bug,也可以把自己的功能需求反馈给他们;

第三个是可以去 MySQL 的官方论坛(https://forums.mysql.com)反馈,那里也有反馈的渠道。

除了上面提到的三个渠道可以反馈,也可以联系国内的 MySQL 开发者,直接把功能需求反馈给他们,让他们在内部反馈。因为开发者不能决定产品的走向,但他们可以把意见反馈给开发团队。这跟 Oracle 很像,就是功能上的需求基本上都是由产品团队决定的。

5、在您看来,MySQL 这么受欢迎是出于什么原因呢,是否有什么特质?

我觉得 MySQL 是这个行业或这个圈子里出现的开源的、而且最方便使用的数据库。一提到 MySQL,都说它上手很快。PostgreSQL 开源的时间可能比 MySQL 更早一点,但为什么 MySQL 会发展这么快,最主要还是它上手比较快。它不需要太多的学习成本,很快就能学习使用。即便你没有很深厚的知识背景或者数据库专业背景,你也可以基本把它用好,只是说可能在数据量很大或者并发量很大的时候,会碰到性能上的瓶颈,但是这些一般都可以在社区里面或者论坛里面找到答案,实在不行,向我们请教也是可以的。

我觉得一开始MySQL 和 PHP 结合得非常好,和 Linux 结合得也非常好,最早的 LAMP 这个组合随着互联网的发展也快速发展了起来。为什么 PostgreSQL 没有发展起来呢,我觉得可能是因为上手实在是比较麻烦,太学术化了。像 MySQL 很早就实现了主从复制,PostgreSQL 却比它慢了很多,所以说 MySQL 特别适合互联网快速发展这种业务需求。

6、选择数据库的时候,有哪些比较看重的因素?

(1)第一点:工程师的知识背景是怎么样的,如果这个工程师用 Oracle 最舒服、最合适,或者他使用 Oracle 的时间最久,那么他有可能会优先选择 Oracle。如果他使用 PostgreSQL 最久、最有经验,他也有可能优先选择这个。

(2)我觉得最重要的是这个团队或者是可以做决策的这个人最开始的初心是怎样的,想在什么样的业务场景下使用。比如说如果是互联网的业务场景,绝大多数是选择 MySQL,绝大多数的游戏也是选择了 MySQL。但是如果是学术使用的场景,比如说早期需要比较强的 JSON 功能支持的时候,那选择 PostgreSQL 可能会比较合适。

(3)还有就是要看团队的技术范围,其实很多时候都是决策者的喜好决定了选择哪个数据库,但总的来说,我还是觉得 MySQL 是最佳选择。它确实会帮你节省很多成本,不管是学习的成本,还是碰到问题需要解决的成本。互联网上都有大量的案例来帮助你避免踩坑。

7、从事 MySQL 开发,有哪些必要的知识储备?

把最基础的知识,例如数据库相关的索引,Schema 优化等,大致了解一下就足够了。如果有耐心把我网站(http://imysql.com)上的资料和 PPT 阅读一遍,也能成为一名比较资深的数据库开发工程师。当然这里说的是应用层的开发,如果是内核级别的开发,那就需要非常深厚的数据库理论基础知识了,以及 C/C++ 开发的能力。

8、网上有种说法认为 MySQL 相对入门比较容易,你对此怎么看;

是的,刚刚我们也有提到过 MySQL 的入门确实非常的容易。当初之所以学习 Linux、MySQL 和 PHP,就是因为当时有一位比我大一届的老乡带着我,帮我在电脑上装了个 Linux 和 MySQL,然后简单使用了一下,我就学会使用数据库了,它不像 Oracle 那么复杂。

在早期大概是 2000 年左右,应该是在 2005 年之前,如果你会安装 Oracle 就已经是一个高手了。但在 2000 年我就已经有能力去编译 MySQL,编译内核了。这足以证明 MySQL 确实是非常简单,非常容易上手的。

但是如果要学得好,就需要有不错的理论知识。比如说数据库一些基本的知识,例如事务、并发、锁和索引等等。这些知识都是需要去深度理解的。

9、从学习者的角度来看,应如何系统地学习 MySQL?

从我的经历来说吧。

(1)入门的话,可能看一下基础的视频或者网上的一些指南就能简单的入门了。这是最基础的入门,已经掌握了基本的使用。

(2)要学会的很重要的素质就是碰到问题的时候,首先要学会去查看、分析日志。

比如说,很多人像我们反馈数据库不能启动了,或者是启动失败或者其他原因,仅仅提供了一张显示不能启动的截图,但没有尝试去分析一下日志,甚至都不知道日志在哪里。这种情况,我建议遇到问题先看一下现场,然后自己分析一下,因为光看结果是不够的,还需要分析 MySQL 内部记录的日志。如果可以去看日志,很有可能自己就能把问题解决了。如果有了这种意识,以后遇到问题都会自己去尝试、去搜索或者查看手册去解决。

(3)说到手册,如果已经有入门的知识以后,建议花一些时间把手册最重要的几个章节读完。有耐心把它看完一遍,至少是初级以上的水平了,如果有耐心看两三遍,那至少是高级的水平了。当然看的过程中要有一个很好的吸收,然后配合练习。

(4)再往下,可以结合其他的数据库,配合数据库的理论,相互地对比借鉴、参考一下。因为不同的数据库锁的实现机制不一样、索引也是,比如 MySQL 就没有 Bitmap 这种索引。因为水平越高就需要和其他的数据库对比学习了,不能仅仅学习 MySQL。

10、作为一名 DBA 应该具备哪些素质,优秀的 MySQL DBA 是如何炼成的?

(1)我觉得最重要的素质是探索问题的求知欲。就像刚刚提到的,遇到问题应该自己想办法解决它。像我自己也是,遇到问题也会自己尝试折腾一下,实在不行我再去搜索(当然搜索尽量用 Google),搜索完以后也要有自己的判断,因为搜索到的结果也有很多是错误的。我在课堂上也是这样和学生说的,利用搜索引擎搜索到的结果很多其实也是错的,自己要有能力去分辨和判断它,当你没能力的时候,要多尝试几次。

(2)还有一个最重要的是阅读文档的能力,尤其是原版文档的阅读。很多人都会去找中文版的文档,但这个其实真没必要,自己去阅读英文的原文文档,然后自己去理解,有些时候可能不能理解个别的词语,但自己动手做几次实验就能理解透了,这种理解和阅读中文文档带来的理解的效果是不一样的。所以最好是阅读英文原文文档,然后自己好好透彻理解。

总结起来就是,遇到问题的求知欲和自己解决问题的欲望,第二个就是阅读文档的能力。

关于优秀的 DBA 是如何炼成。一开始我自学的时候也是各种折腾,自己各种各样的动手实践,总之就是多动手多操作,操作的过程中遇到问题首先搜索,自己判断,然后看文档做校验,还有就是把文档多看几遍。我之所以有很大的提升,很大的原因就是我把英文原文文档认真完整的看了一遍,后来又大概地看了两遍。看的过程中确实是很累,但这个对你的帮助和提升其实是很大的。

最后安利一下叶金荣老师的知数堂网站(http://zhishuedu.com)和他的个人微信公众号 “老叶茶馆(imysql_wx)”,上面都有大量 MySQL 相关的学习资料。

举报
局长
发帖于1年前 15回/4K+阅
共有15个评论 最后回答: 1年前

没sqlite简单

--- 共有 1 条评论 ---
eechenSQLite写并发太弱了,这点是硬伤.另外,单机对于大规模Web应用来说也是一个限制.不过,放在Linux内存文件系统里的SQLite读写性能会有很大提升.另外,配合无需词典的二元分词法,单机上可以用SQLite当做一个全文检索的装备.我的程序用PDO同时支持SQLite和MySQL. 1年前 回复

占位

--- 共有 1 条评论 ---
digoal感谢占座,嘿嘿。来一发PostgreSQL数据库十八摸: https://yq.aliyun.com/articles/69418 更多PostgreSQL参考阿里云栖社区 https://yq.aliyun.com/users/1384833841157402 1年前 回复

mysql的json支持就一堆函数去处理一个从text仅仅改名为json的数据类型而已,一点优化没有。mysql想比pg是不是太天真了?

顶部