序言

我的DBA之路

第一次了解有数据库这么一个软件是在2000 年下半年,我在某本书(太久远不太记得书名了)中的一篇文章里面了解到有一种叫做数据库的神奇软件,可以帮助我们快速地实现大量数据的过滤和统计。然后我跑到图书馆苦苦寻觅与数据库相关的书籍,最先进入我视线的是一本白色封皮讲述Oracle的“大砖块”,我拿在手上大概翻了一下,实在太沉重,放弃之,继续寻找。最终找到一本关于Foxpro的书,看到也是关于数据库的,而且较之前讲Oracle的“大砖块”薄了很多,于是非常兴奋地借回去开始研究。

2002年,我进入南京工业大学学习,由于有一点计算机基础和基本的C语言编程知识,大一就进入了校大学生科学技术协会的电脑部,参与开发维护一个为校内学生服务的小网站Foru(现在已经不存在了)。在那里,我第一次接触到Java编程语言和MySQL数据库,如果没有记错的话,当时的MySQL是3.2.*版。虽然当时已经开始学习如何通过Java程序进行MySQL数据库开发,但主要精力还是放在了Java语言的学习上,对MySQL并没有太深入的研究。

2003年下半年,我进入学校一个非常有名的完全由学生自发组织的计算机爱好者组织:Mars Studio。Mars Studio的指导老师最初是由学校网络中心的崔北亮老师担任,主要任务是开发维护一个面向校内学生的娱乐休闲网站“工大在线”,包括视频和音乐的在线播放及下载服务,还有一个BBS论坛(现在的玄武雅阁)等,以及为学校各个部门开发一些小网站。参与这些项目也算是勤工俭学,可以赚点生活费。当时的“工大在线”除了玄武雅阁论坛使用Java + MySQL之外,所有内容都是基于ASP + Micosoft SQL Server 2000开发的。所以那时候还学会了使用Java和APS编写网站应用,学会了MySQL的简单维护,了解到数据库中原来还有索引这么神奇的东西,同时也对Microsoft SQL Server有了一点了解。在Mars Studio一直待到大四搬离当时的校区,回到市中心的新模范马路本部。在Mars Studio的日子,是我进入现在公司(阿里巴巴)之前计算机水平提升最快的时候,也正是那时候给我现在的工作打下了比较扎实的基础。在那段时间里,我跟着Sailing一起学Java,跟着“笨小孩”学ASP + MS SQL Server,跟着崔北亮老师学Windows下的Web服务搭建,跟着尹晨姐学Solaris基本管理……

2005年底,我开始接触商业数据库中绝对的王者:Oracle。深埋心底的对数据库的强烈兴趣再一次被勾起。从那时候开始,我基本已经将自己的职业发展方向锁定为DBA了。我非常幸运,一毕业就如愿以偿地从事了DBA的工作,而且是在国内顶级的DBA团队:阿里巴巴DBA Team。随后的两年多时间里工作一直与Oracle相关,主要从事项目开发中的数据库相关支持及调优。在做Oracle相关工作的前一年多里,我对MySQL数据库并没有深入的研究,基本处于关注状态。

2007年底开始将研究重点转向MySQL数据库。主要包括MySQL 5.0和之前版本之间差异的研究,MySQL数据库调优及利用MySQL数据库搭建企业级高可用可扩展的分布式数据库集群系统。

在阿里巴巴从事的Oracle相关的工作让我对企业级数据库高可用架构方面有了较深的认识,同时也积累了大量的主机(PC Server和小型机)和存储的使用经验。同时也深深体会到了在如今这样一个互联网信息高度膨胀的环境中,集中式数据库在很多应用场景中所遇到的扩展局限已经越来越明显。而且,商业软件和中高端硬件设备高昂的价格也给很多互联网公司带来了较大的压力。正是这两个主要因素,造就了开源数据库中的王者:MySQL越来越受到大家的青睐。

这本书讲了什么

本书中的大部分内容主要面向有一定的MySQL基础或至少有一定SQL语言基础的读者朋友。全书包括基础、性能优化和架构设计三篇内容。

基础篇介绍了MySQL软件的基础知识、架构组成、存储引擎、安全管理及基本的备份恢复知识。主要希望读者朋友能够在整体上对MySQL数据库有一个较深的认识,方便大家在性能调优及架构设计方面更容易作出决策。

性能优化篇内容从影响MySQL数据库应用系统性能的因素开始,针对性地对各个影响因素进行调优分析。如MySQL Schema设计的技巧,Query语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。考虑到任何数据库系统中,锁定机制都对性能有很大影响,所以还分析了MySQL数据库中主要存储引擎的锁定机制。

架构设计篇则主要以设计一个高可用可扩展的分布式企业级数据库集群环境为目标,分析介绍了通过MySQL实现这一目标的多种架构方式。主要包括可扩展和高可用两部分内容,可扩展部分包括设计原则、Replication的利用、数据切分、如何使用Cache和Search,以及NDB Cluster等内容。高可用则主要包括Dual Master、DRBD、NDB Cluster,以及系统监控等方面。

该如何阅读本书

或许很多读者朋友都有这种体会:要想真正学会并掌握一门技术,就一定要有自己思考并实践的过程。所以本书中的大部分内容主要是提供一个分析思路和解决问题的思路,而没有太多的具体操作记录,主要以引导读者朋友思考、体会和实践为目的,本书不是一本技巧集合或操作手册类的书籍。

作为一个MySQL使用者的读者朋友在阅读本书的时候,最好能够有一个自己可以实践的MySQL测试环境,可以通过自己动手实践来加深认识,真正理解。

而对于那些管理层或是技术决策者来说,可能并没有太多时间进行大量的测试和实践,对于这样的读者来说,学习到解决问题的思路也就够了。

致谢

在这本书的编写过程中,得到了家人、朋友和同事的支持与帮助,所以在这里我衷心地感谢大家。感谢家人对我的支持与鼓励,感谢冯大辉、陈吉平、冯春培、翟振兴、叶金荣、吴诗展几位朋友为本书作序推荐,以及在我写书过程中给予帮助。感谢我所在的DBA Team中的陈栋、张瑞、童家旺、王涛、罗春、陈立、郑勇斌、赵圣强、范鑫、郑隐、唐成、梅庆、周黎艳、廖鑫和金官丁,大家在工作中给了我大量的支持与帮助。感谢兄弟公司DBA Team中的所有DBA兄弟们对我的帮助与支持,尤其是周光辉和钟赟对本书的重要建议。此外还要感谢各位网友在这本书编写过程中给我提出了大量非常有价值的意见和建议,主要包括吴诗展(百度)、叶金荣(搜狐)、吴捷(第九城市)、张宴(金山)、王坤(琥珀网)、田熠庆(土豆网)、姚尚朗及其他我还不知道姓名的网友。

在本书的编写过程中,博文视点的各位编辑一直都在给予我各种帮助和支持,特别是周筠老师、徐定翔、杨绣国和杨小勤等几位编辑,在此特予感谢!

最后感谢曾经在Mars Studio中的崔北亮、唐一丁、蔡永航、曾军、陈刚、罗修杰、陈征、李杰、陈永伟、徐小慧和刘梦欢及其他所有同学,是你们的帮助与支持让我得到了更快的成长。

作者联系方式

由于自身能力有限,书中难免存在错误和疏漏,如果读者有什么想法和意见可以写邮件给我,或者在我的博客上留言,或者在CNProg社区与作者进行在线Q/A。

个人博客:http://www.jianzhaoyang.com

E-mail:sky.jian@imysqler.com

在线Q/A:http://www.cnprog.com/books/mysql-zhaoyang

简朝阳

阿里巴巴MySQL & Oracle DBA

2009年4月