MySQL性能调优与架构设计(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-08 20:50:22

点击下载

作者:简朝阳

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

MySQL性能调优与架构设计

MySQL性能调优与架构设计试读:

推荐序

一拥抱MySQL数据库技术

时至今日,恐怕已经没有人再把MySQL当成一个玩具性质的软件产品了,即使是数据库市场执牛耳者如Oracle公司也不得不正式面对来自MySQL的冲击。如果说几年前,还有人对使用MySQL有所疑虑,经过几年来互联网的高速发展,无数大型网站用其成功案例证明,以MySQL为基础的数据层解决方案已经成为互联网应用不可或缺的一个重要组成部分。

当下也是数据库技术应用处于激烈变革的时期。这并不是说传统的关系数据库技术在这两年有了多大的新突破,而是用户的需求在迅速变化。更多时候,用户不再需要单一的软件产品,而需要的是灵活、高效、可靠、可控、低廉的解决方案。很多大型站点甚至根据自己的需求来改进MySQL,进而回馈给开源社区,这也是开放的魅力所在,对于传统的商业数据库软件商来说,这是不可想象的事情。

MySQL早已不再是单一的数据库软件,以其为基础发展起来的各种开源组件令人目不暇接,而用这些组件构成的解决方案也是层出不穷。如何能够把以MySQL为核心的这一系列软件充分运用,构建大型可扩展性网站,正是不少LAMP架构体系的网站开发者乃至架构师一直关心的问题。现在中文图书市场上MySQL相关的书籍并不在少数,但放眼看去,绝大多数是教程类的书,这本《MySQL性能调优与架构设计》则主要着眼于性能与架构这两个当下大家更为关注的话题,是作者结合几年来的实战经验与研究心得写成的,有了它相信能让不少网站少走弯路。

期待这本书让更多人受益。如果读者朋友也能把自己的心得分享出来,那是再好不过的事情了。经常有即将毕业的学生及网络上的朋友给我发来邮件,表示对数据库技术有兴趣,但是不知道如何切入,我的建议是,从学习MySQL开始吧!冯大辉支付宝(中国)网络技术有限公司数据架构师,Oracle ACEBlog:http://dbanotes.net于2009年4月推荐序二

2006年,阿里巴巴B2B与淘宝DBA团队第一次引入了校园招聘的毕业生,两年半的时间过去了,当年加入淘宝的毕业生成了淘宝开发DBA的主管,他就是本书的作者。第一次听别人说起作者时,有两点印象是比较深的,一是误传他毕业于军校,以至于后来又误传说他曾经加入过海军陆战队;二是他目标非常清晰,就是一定要做DBA,对于其他职位不感兴趣。更后来,又知道他是我老乡,甚至春节一起回乡探亲。

本书作者刚毕业的时候其实学的是Oracle,后来,一是因为工作本身的需要,二是我给了一些建议,所以他改走了MySQL这条路。我很高兴他能做出这个选择,并能在MySQL这条路上持之以恒地坚持下来。在当时做MySQL DBA,其实是一个非常好的机会,也是一个新的切入点。Oracle 2001年在国内开始起步,2005年左右达到鼎盛的辉煌时期,同时造就了一大批高级别的Oracle DBA,这也成为后来者难以逾越的一道高墙。MySQL则不一样,这一两年刚起步,未来两年如果能达到鼎盛时代,同样应当能成就一批高级DBA,本书作者有可能就能成为其中的一员。

在这么一个浮躁的年代,一个物欲横流的时代,作者能持续保持学习的动力,并且不断进步提升,是非常不容易的。这本书,既是作者这几年来DBA成长之路的一段历程,更是非常好的一个经验总结,特别是对于那些刚走出校园的毕业生,这本书或能让他们少走很多的弯路。很多毕业生,或者是渴望成功的普通工程师,总是把眼光放在别人成功的路上,但是,实际上,更容易成功的地方,是从来没有人成功过的地方。

我写过书,深知写书的难度,了解把知识与经验从点汇总到面的艰辛,但是,值得兴奋的其实是那种艰辛之后的收获,一通百通之后的成就感。我对MySQL的研究不是很深入,但是,从我对作者本人的熟知,从对作者做过的实际案例的了解,我相信本书能给大家带来耳目一新的感觉。同时,也感谢作者的辛苦工作,能把自己的知识与经验分享给大家,感谢作者能给大家带来如此好的一本书。陈吉平淘宝首席DBA,Oracle ACE《搭建Oracle高可用环境》一书的作者Blog:http://www.orawh.com/于2009年4月推荐序三

在我们这个时代,在互联网上交流、交友、交易、Blog、游戏……已经融入了我们的生活。很难想象,一下子没了互联网我们会如何的不习惯,恐怕堪比互联网出现前突然让所有家庭没了电视。大量互联网上的活动,产生大量有价值的信息,这些信息被存放于数据库中。互联网也对数据库的技术传播功不可没。2000年的时候,要在网络上寻找有关数据库的技术资讯是那样地艰难,大量技术问题都须要自己去摸索。2002年Oracle数据库讨论和学习氛围的兴起,成就了那一代数据库技术爱好者。他们对数据库技术的热爱,以及乐于分享的精神,促进了DBA这个行业的蓬勃发展。

随着时代的进步,大中型机的没落,Intel CPU技术的发展引领着PC Server的更新换代,它与小型机的性能差距越来越小,到今天价格几万人民币的PC Server已经可以超越部分厂家的价值百万的小型机处理能力。PC Server的低成本和高性能是LAMP发展的基础,成本的巨大差异是用户选择PC Server的原动力。数据的爆发增长对于数据库的渴求,让人们自然地将目光投向了MySQL,MySQL作为开源数据库中的佼佼者,向投入成本大的Oracle数据库发起了挑战。其实这么多年来在中国MySQL数据库的应用和管理人才非常少,基本停留在初级的阶段。如今的状况看起来就跟2001年左右的Oracle数据库一样。这意味着MySQL数据库领域可能迎来高速的发展,这样也必然形成金字塔型的人才结构。在目前应用普遍非常简单的情况下,通过一两年努力,就很容易站到行业的前端,随着市场的扩大,站在行业领域前沿的人的价值也就越大。

本书作者刚参加工作的时候也是做Oracle数据库的,后来经过对MySQL潜心研究和应用实践,他在这个领域已经进入国内领先行列。为了加快这个行业的发展,作者不断地在互联网上分享他的实践研究成果,如今整理成书,是一个自然的结果。作者对MySQL技术的了解细致深入,对大规模群集方面有着丰富的解决方案。大家只要看一看本书内容,就知道它的价值。这恐怕是国内市面上第一本如此透彻、深入的书籍。感谢作者给我们带来这样精彩的作品。冯春培阿里巴巴首席DBA、研究员,Oracle ACEBlog:http://bitirainy.spaces.live.com/于2009年4月推荐序四

4年前,当我第一次接触MySQL时,还是4.1版本。当时的感觉是这个数据库怎么这么“小”:安装文件小,只有不到20M;支持功能少,连基本的视图、过程、分区等功能都不支持;入门简单,几乎一天就可以熟练使用。不仅如此,使用起来也感觉比较“怪异”,创建表时还要指定“MyISAM”、“InnoDB”这样奇怪的“存储引擎”,表名还要分大小写。这对当时已经习惯ORACLE这样“大型”数据库的我来说,简直就像退回到了旧石器时代,心想虽然免费,但这样的数据库能用吗?

随着工作的需要,对MySQL的了解慢慢地多了起来,原来的一些观念也逐渐发生了改变:虽然功能少,但占用磁盘空间小,而且对于开发使用来说,主要的功能基本都有,尤其是在MySQL 5.0发布之后,一些常用功能更加完善,而对于功能庞大的Oracle来说,近一个GB的安装文件中,可能真正经常使用到的功能最多也就20%;虽然使用时要指定各种各样的“存储引擎”,但这些存储引擎却是八仙过海,各有各的“神通”,在不同的使用场景中,我们可以灵活地按需进行选择,尽可能地优化数据库性能;尤其是MySQL的开源策略,越来越觉得它是MySQL能够普及的一个最大特点。首先,在满足GPL协议的情况下,MySQL可以任意下载并可以商用,这使得企业信息化建设的成本大大降低,这也是近几年互联网行业发展极快的原因之一;其次,开源的特性使得大家都可以对数据库源码进行一些个性化的修改,用来提高数据库的性能或增加新的功能,而这些改进反过来也使得更多使用者从中受益。

在互联网行业,MySQL目前已经使用非常广泛,但相关的资料和书籍却一直比较缺乏。在已出版的中文图书中,MySQL相关的书屈指可数,专门介绍MySQL的书更是凤毛麟角。一年前,我和几位同事一起合作写了一本《深入浅出MySQL》,当时写书的初衷是将工作中使用MySQL的一些经验记录下来,希望使更多的MySQL初学者少走些弯路。出版之后,市场的反应有点出乎我们的意料,读者关注度一直比较高,细想之下,也许就是因为系统介绍MySQL的中文书籍和资料实在太少了。很多读者看过后提出了不少批评意见和建议,其中较多读者指出MySQL的架构设计和优化内容偏少。熟悉MySQL的读者一般都知道,MySQL最大的问题就是在大数据量和高并发环境下和商业数据库的性能差别较大,因此对MySQL的优化更多的不在于数据库本身,而在于架构的设计,即如何通过分表、分库、复制、Cache等技术使得数据库能合理分配访问压力。如何来进行架构设计则更多的取决于设计者的经验,市场上相关资料很少能够见到,而本书恰恰弥补了这一空白。

虽素未谋面,却早已得知作者在写一本MySQL的大作,内容主要是MySQL架构设计和优化方面的。有幸提前看到了部分原稿,感觉文笔流畅、思路严谨、图文并茂,最重要的是内容很实用,相信此书的出版会给广大互联网朋友带来很多收获!

在写本文的前一天,业界发生了一个令人震惊的收购,Oracle将以74亿美元的价格收购SUN,这也使得昔日数据库领域的两个重要竞争对手Oracle和MySQL成为了一家,数据库的市场格局因此也将发生重大改变,MySQL能否会在Oracle这样一个对数据库系统有着极深理解的公司的主导下给大家带来更多的惊喜呢?让我们都拭目以待吧!翟振兴网易高级DBA《深入浅出MySQL》一书主要作者Blog:http://zhaizhenxing.blog.51cto.com/于2009年4月推荐序五

1995年5月23日,这是一个普通的日子,但对MySQL来说,这是初生的时刻;自此,这个世界上多了一个数据库系统,这就是一开始被人们嘲笑为“玩具”数据库的MySQL。我是在2000年开始接触Linux和MySQL的,那时候国内网络仍然很不发达,想要找到MySQL的学习资料太不容易了,唯一可用的就是MySQL手册,而且还是英文的。就这样懵懵懂懂直到工作,这种情况仍未得到太大改善。这时候,我就在想,有朝一日我也要学习开源社区的精神,为开源社区做出一定的努力。此后,我利用业余时间翻译了不少MySQL的英文手册,以及不少优秀的技术材料,期间也有出版社联系我商谈出书事宜,虽未出过书,但深知写书的艰辛,因此也没敢答应下来,至今仍为一大遗憾。

2008年2月26日,Sun收购了MySQL,可爱的小海豚差点就此走上了封闭的道路,幸好有开源社区各知名人士的奔走,才使得它仍然活跃在开源社区里,这让我们对MySQL的未来充满了信心。2009年4月20日,Oracle收购Sun后,我们却已不再担心MySQL的未来,因为我们坚信有开源社区的努力,即使Oracle想要扼杀它,也不会得逞的。

随着互联网的发展,电子商务、Web 2.0等的崛起,一大批以LAMP技术为依托的企业如雨后春笋,这也大大刺激了MySQL DBA这个职位的需求。从前大家都把MySQL不当回事,认为普通的PHP程序员或系统管理员就可以搞定,但随着数据量和访问量的双重暴增,术业有专攻这句老话得到验证了,没有专业的MySQL DBA,想要再把LAMP架构做好是不可能的事。本书的出现为我们提供了一个机会,它可以帮助初级MySQL DBA迅速成长起来,让我们在面对负载日渐严重的数据库服务器时不至于心慌气短,手忙脚乱。

本书由阿里巴巴的高级DBA简朝阳先生呕心沥血编著而成,我想它应该是目前国内最好的MySQL技术书籍了。它适用读者范围广,是初级DBA到LAMP架构设计师手头必不可少之利器。本书由易到难,不仅阐述了基础知识,同时深入剖析了MySQL的内部工作机制及其原理,最后针对LAMP架构中的各种常用技术做了详细分析。想成为优秀DBA或LAMP的话,它会是你的良师益友,我们强力推荐此书。叶金荣(http://imysql.cn)搜狐公司高级DBAMySQL专家组(http://mysqlmeg.cn)于2009年4月推荐序六

即使Oracle收购SUN,将MySQL这只小海豚归于麾下,也未必是件很糟糕的事情,MySQL和Oracle面对的客户群体不同,一个偏重中低端、互联网数据库市场,一个偏重高端、大型企业级数据库市场,有太多的理由相信这一收购不会是MySQL的终点,相反MySQL将会是Oracle产品线的良好补充,也许不久即成为埃里森手中的另一张王牌。

目前MySQL装机量接近1200万,占有全球数据库25%市场份额,互联网公司80%的市场份额,特别近几年的Web 2.0兴起,更是引爆了MySQL的应用。但这些MySQL数据库大部分由开发工程师或系统工程师兼职维护着,国内专职MySQL DBA屈指可数,更别说是MySQL DBA团队。随着MySQL应用的逐步成熟,国内一些重量级互联网公司早已看到其潜力并进行大规模使用,更有一些公司磨刀霍霍却苦于该领域技术人才难求,百度、淘宝等知名的互联网公司都有大半年招不到一名合适MySQL DBA的经历。而系统介绍MySQL的中文书籍非常之少,值得一读的MySQL中文书籍更是少之又少。现在MySQL技术领域确实需要一批从理论与实践中锤炼出来的著作来造就更多更优秀的MySQL技术大师。

从作者撰写此书开始,我就一直关注着,时而与其深夜相遇于MSN,呼之,答曰:写书ing。白天在工作中实践,夜里在灯光下沉淀。当时我就迫不急待地想提前一睹,现有幸如愿,阅后颇有感慨,字里行间可见作者对MySQL理解之深!特别是优化篇的“Query优化”(第8章)和架构篇的“数据切分”(第14章),“Query优化”章节结合作者多年的DBA实战经验总结了Query优化的十大原则和优化思路,阐述MySQL Query Optimizer的工作机制,并通过Explain和Profiling进行实例解析,清晰易懂,见解独到。“数据切分”章节提供了垂直切分和水平切分等多种数据量膨胀解决方案,并深入分析了不同方案的优缺点,为提升数据库集群的扩展性,解决数据库瓶颈提供了极有价值的借鉴参考。

相信此书会成为你通往MySQL技术大牛道路上的正确选择。吴诗展百度高级MySQL DBAhttp://dbaview.cn于2009年4月序 言我的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 DBA2009年4月作者访谈录

针对简朝阳先生的新书《MySQL性能调优与架构设计》的出版,博文视点对简先生进行了专访,现将博文的编辑与简先生的访谈对话整理成文,以飨读者。博文编辑

简先生,您好,首先想请您向读者介绍一下您目前在阿里巴巴负责的工作及以前参与过哪些项目?简先生

之前主要在做Oracle数据库相关的工作,现在主要负责公司MySQL数据库的架构方案设计和数据库维护,以及MySQL相关项目支持与优化工作。

参与过的核心项目有以下几个:

1.阿里巴巴某Web 2.0模式的高并发交互式应用的数据库架构方案设计及项目支持,涉及的数据库平台为MySQL。

2.阿里巴巴某核心表水平拆分,主要工作为拆分实施,以及从Oracle数据库迁移到MySQL数据库的架构方案设计,涉及的数据库平台为Oracle和MySQL。

3.阿里巴巴国际站全站重构,主要工作为底层数据库结构重构设计及数据迁移,涉及的数据库平台为Oracle;

4.阿里巴巴中国站新数据库系统基础设施搭建,主要工作为小型机和存储基础实施及架构方案设计,涉及的数据库平台为Oracle;博文编辑

通过参与这些项目,您觉得对自己哪些方面的提高最有帮助?简先生

参与这些项目,对我个人的提升主要表现在以下三个方面:

1.对数据库应用系统的整体调优能力;

2.对数据库系统架构方案的设计及实施能力;

3.对集中式和分布式数据库架构各自优缺点的理解。博文编辑

目前有一些企业逐渐将业务数据从商业数据库迁移到MySQL,您是否看好这一趋势?简先生

目前确实有越来越多的商业公司甚至是顶级的互联网公司正在(或在评估)将业务数据从商业数据库系统往开源数据库系统上迁移,而其中大部分的公司选择了迁往MySQL数据库。其原因可能有多个,主要原因可能是MySQL数据库是基于GPL开源协议的开源数据库软件,只要有能力,使用者完全可以非常透彻地了解到所有功能的实现并自行增加、修改或裁减。MySQL的社区版本是完全免费的,即使是企业版的价格也很便宜,而商业版数据库价格非常昂贵,所以从商业数据库软件迁移至开源的MySQL可以节省大量的成本,这在当前这样的经济形势下是非常具有诱惑力的。当然,可能有人说开源数据库软件有很多,为什么要选择MySQL呢?那当然是因为MySQL数据库本身优异的性能表现及卓越的稳定性了,而且其功能也已经非常完善。从我个人的分析及互联网行业各公司的应用架构发展来看,今后将会有越来越多的公司选择将自己的数据库平台从商业数据库迁移至MySQL数据库,我很看好这一趋势。博文编辑

MySQL因其部署成本低,应用灵活的特性,一直受到低端Web应用的青睐,您觉得它是否会逐步威胁其他商业数据库在高端企业应用中的市场?简先生

目前来看,MySQL数据库的主要使用群体还是互联网公司,这与MySQL数据库本身的特点及市场定位有很大的关系。在这一市场群体方面,MySQL数据库肯定是会对其他商业数据库的市场份额造成一定影响的。至于高端企业应用方面,从MySQL数据库自身的定位及市场策略来看,短期内应该不会对商业数据库造成太大威胁吧,但再往后就不一定了。博文编辑

Sun公司收购MySQL之后推出了5.1版,但其稳定性和功能离大家的期望还有差距。作为一名MySQL用户,您期望未来MySQL在技术上有哪些突破和尝试?简先生

作为一个实际的最终用户,个人觉得MySQL 5.1目前最须要解决的是其在线DDL功能的增强,这对于大数据量高并发的Web应用来说,是非常重要且紧急的需求。多核CPU已经成为当前CPU的主流发展方向,MySQL在充分利用多核并发能力方面如果能有较好的突破,将会让很多使用者节省大量的硬件成本,所以这也是一个急须解决的问题。此外,进行在线物理备份的功能,以及一个Slave从多个Master同时进行复制,这种可以很大程度提高维护便利性的需求,其实也是非常重要的。最后,性能的不断提升,自然是所有使用者都希望看到的,也是MySQL数据库一直以来最重视的需求方向。相信在SUN这样一家拥有大量的顶级技术专家的公司的带领下,MySQL将会越来越优秀,越来越受到广大使用者的青睐。博文编辑

最后,想请您对初学MySQL的读者提供一些建议和经验。简先生

MySQL数据库的基本使用方法非常简单,如果只是希望简单地使用MySQL数据库,个人觉得通过细致学习MySQL官方文档手册加上自己的实验分析,就可以满足要求了。如果希望能够做一个出色的MySQL DBA,或者更进一步加深对MySQL数据库的理解,建议读者朋友在充分理解了MySQL文档手册的基础上,进一步学习一下MySQL Internal方面的文档(http://forge.mysql.com/wiki/MySQL_Internals),增加对MySQL内部实现原理的理解,同时多关注一些经验比较丰富的MySQL DBA或架构师所分享出来的MySQL数据库使用经验和心得。如果有一定的C/C++语言基础和开发经验的话,可以研究一下MySQL的源代码,这对于深入理解很多核心功能是非常有帮助的。最后,以Open的心态在互联网上分享自己的经验,经常和大家一起讨论交流,其实帮助别人的同时也是在提升自己。这也是我个人学习MySQL和经历和体会,希望能够对大家有那么一点点帮助。第1篇基础篇第1章 MySQL基本介绍

1.0 引言

1.1 MySQL Server简介

1.2 MySQL与其他数据库的简单比较

1.3 MySQL的主要适用场景

1.4 小结1.0 引言

作为最为流行的开源数据库软件之一,MySQL数据库软件已经广为人知了。但是为了照顾对MySQL还不熟悉的读者,本章将对MySQL做简单的介绍。主要内容包括MySQL各功能模块的组成,各模块协同工作的原理,Query处理流程的详细分析等。可以帮助读者清晰地理解MySQL的原理机制,定位数据库的各类问题。1.1 MySQL Server简介1.1.1 什么是MySQL

MySQL是由原MySQL AB公司自主研发的,是目前IT行业最流行的开放源代码的数据库管理系统,同时它也是一个支持多线程高并发多用户的关系型数据库管理系统。

MySQL数据库以其简单、高效、可靠的特点,短短几年的时间就从一个名不见经传的数据库系统变成一个在IT行业几乎无人不知的开源数据库管理系统。从微型的嵌入式系统到中小型的Web网站,至大型的企业级应用,到处都可见其身影。为何一个开源的数据库管理系统会变得如此流行呢?我在2003年第一次接触MySQL之前,也非常纳闷。不过,或许在我向您大概地介绍其发展历程之后,您心中的这个问题就会消失了。1.1.2 艰难诞生

1985年,瑞典几位志同道合的小伙子(以David Axmark为首)成立了一家公司,这就是MySQL AB的前身。这家公司最初并不是为了开发数据库产品,而是因为在实现其他目标的过程中,需要一个数据库。他们希望能够使用开源的产品,但当时并没有合适的选择,于是就自己开发。

在最初,他们只是设计了一个利用索引顺序存取数据的方法,也就是ISAM(Indexed Sequential Access Method)存储引擎核心算法的前身,并结合mSQL来实现自己的应用需求。在早期,他们主要为瑞典的一些大型零售商提供数据仓库服务。在系统使用过程中,随着数据量越来越大,系统复杂度越来越高,ISAM和mSQL的组合逐渐不堪重负。在分析性能瓶颈之后,他们发现问题出在mSQL上面。不得已,他们抛弃了mSQL,重新开发了一套功能类似的数据存储引擎,这就是ISAM存储引擎。刚才已经谈到他们主要为零售商提供数据仓库服务,想必您也容易理解为什么直至现在,MySQL最擅长的是查询性能,而不是事务处理了(须要借助第三方存储引擎)。

软件诞生,自然该取一个好听并且容易记住的名字。不过至今,MySQL AB仍然没有公布当初为什么给这个数据库系统取名为MySQL。据传MySQL取自创始人之一Monty Widenius女儿的名字,或许大家会认为这仅仅是我的猜测,其实这也并不是完全没有根据。读者或许知道目前正处于研发的用来替代MyISAM存储引擎的新一代存储引擎产品Maria,为什么叫Maria?笔者曾经和MySQL前CTO David有过这方面的沟通,得到的答案是,Maria是以他小女儿的名字命名的。或许这是几位MySQL创始人为软件命名的一个喜好吧。

在MySQL诞生之初,其功能还非常粗糙,和当时已经成熟稳定运营多年的商业数据库管理系统完全不能比。MySQL之所以能够成功,和几个创始人最初采用的策略关系非常大。1.1.3 寻求发展

MySQL诞生的时候,正是互联网开始高速发展的时期。MySQL AB通过优化MySQL满足了互联网开发者对数据库产品的需求:标准化查询语言的支持,高效的数据存取,不必关注事务完整性,简单易用,而且成本低廉。当时大量的小公司都愿意采用MySQL作为数据库应用系统的数据库管理系统,所以MySQL的用户数量不断地增长,进一步促进了MySQL自身不断地改进和完善,进入了良性循环。

合理地把握需求,准确地定位目标客户,为MySQL后面的发展铺平了道路。可以看到,MySQL一开始就没有拿大型数据库应用系统做为自身的目标,更没有将所有的IT行业定位为自己的目标用户,而是选择了当时并不受重视的一小部分Web开发者作为自己的客户来重点培养发展。这种做法或许值得其他IT企业学习。1.1.4 巨人崛起

可以说,正是MySQL最初抓住了互联网客户,造就了今天MySQL在互联网行业的巨大成功。当然,MySQL能高速发展,离不开另外一个很关键的因素,那就是开放源代码。

在2000年的时候,MySQL公布了自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。虽然在当时的环境下,开源还没有现在这样流行,但那是开源世界真正开始让大多数世人所接受并开始推崇的起步阶段。当然MySQL的成功并不仅仅是因为以上这些原因,但不能否认正是MySQL这一战略性质的策略让它在进一步拓展自己客户群的路上一路顺风。MySQL此后的发展路程我想就不须要继续啰嗦了,基本上都可以从MySQL的官方网站(http://www.mysql.com)得到相应的答案。1.2 MySQL与其他数据库的简单比较

前面简单介绍了MySQL的发展历程,并从中了解了MySQL快速崛起的必要条件。接下来,我们在功能、性能,以及其易用性方面将MySQL和其他主流的数据库做一个基本的比较,从而了解MySQL成为当下最流行的开源数据库软件的充分条件。1.2.1 功能比较

作为一个成熟的数据库管理系统,要满足各种各样的商业需求,功能肯定是会被列入重点参考对象的。MySQL的早期版本功能非常简单,只能做一些很基础的结构化数据存取操作,但是经过多年的改进和完善之后,现在它已经基本具备了所有通用数据库管理系统需要的相关功能。

MySQL基本实现了ANSI SQL 92的大部分标准,仅有少部分并不经常被使用的没有实现。比如在字段类型支持方面,另一个著名的开源数据库PostgreSQL支持的类型是最完整的,而Oracle和其他一些商业数据库(比如DB2、Sybase等)较MySQL要相对少一些。这一点,我们可以通过TCX的Crash-me测试套件得出的测试报告得知。在事务支持方面,虽然MySQL自己的存储引擎并没有提供,但是已经通过第三方插件式存储引擎InnoDB实现了SQL 92标准定义的4个事务隔离级别的全部,只是在实现的过程中每一种引擎的实现方式可能有一定的区别,这在当前商用数据库管理系统中并不多见。比如,大名鼎鼎的Oracle数据库就仅仅实现了其中的两种(Serializable和Read Commited),而PostgreSQL支持4种隔离级别。

不过在可编程支持方面,MySQL和其他数据库相比还有一定的差距,虽然最新版的MySQL已经开始提供一些简单的可编程支持,如开始支持Procedure、Function、Trigger等,但是所支持的功能还比较有限,和其他几大商用数据库管理系统相比,还存在较大的不足。如Oracle有强大的PL/SQL,SQL Server有T-SQL,PostgreSQL也有功能很完善的PL/PGSQL的支持。

整体来说,虽然在功能方面MySQL数据库作为一个通用的数据库管理系统暂时还无法和PostgreSQL相比,但是其功能完全可以满足我们的通用商业需求,提供足够强大的服务。而且不管是哪一种数据库在功能方面都不敢声称自己比其他任何一款商用数据库管理系统都强,甚至都不敢声称能够拥有某类数据库产品的所有功能。因为每一款数据库管理系统都有自身的优势,也有自身的局限,这都说明每一款产品重点服务的方向不一样。1.2.2 易用性比较

从系统易用性方面来比较,每一个使用过MySQL的用户都能够明显地感觉出MySQL在这方面的优势所在,尤其是相对于一些大型的商业数据库管理系统,如Oracle、DB2及Sybase。对于普通用户来说,它们的操作难易程度明显不处于一个级别。MySQL一直都奉行简单易用的原则,也正是靠这一特性吸引了大量的初级数据库用户。这一批又一批的初级用户,在经过了几年的成长之后,很多都已经成为了高级数据库用户,而且也一直都在伴随着MySQL成长。

从安装方面来说,MySQL安装包大小仅100MB左右,与那几大商业数据库相比完全不是一个数量级。它的安装也比Oracle等商业数据库容易很多,不论是通过已经编译好的二进制分发包,还是通过源码编译安装,都非常简单。

再从数据库创建方面来比较,MySQL仅仅需要一个简单的CREATE DATABASE命令即可在瞬间完成建库的动作,而Oracle数据库与之相比,创建一个数据库简直就是一个庞大的工程。当然,二者在概念上存在一定差别也不可否认。1.2.3 性能比较

性能高一直是MySQL引以自豪的一个特点。在权威的第三方评测机构多次测试比较各种数据库TPCC值的过程中,MySQL一直都有非常优异的表现,而且在其他所有商用的通用数据库管理系统中,仅仅有Oracle数据库能够与其一较高下。至于各种数据库详细的性能数据,这里就不再介绍,大家完全可以通过网上第三方评测机构公布的数据了解具体细节信息。

MySQL一直以来奉行一个原则,那就是在保证足够稳定性的前提下,尽可能地提高自身的处理能力。也就是说,在性能和功能方面,MySQL第一考虑的要素主要还是性能,MySQL希望能够在满足客户99%的需求的前提下,将剩余的所有精力都用来努力提高系统性能,而不希望自己是一个比其他任何数据库的功能都要强大的产品。1.2.4 可靠性

关于可靠性的比较,并没有太多详细的评测比较数据,但是从目前业界的反映中可以了解到,几大商业厂商的数据库之可靠性肯定是没有太多问题的。但是作为开源数据库管理系统的代表,MySQL也有非常优异的表现,而并不是像有些人心中所怀疑的那样,以为不是商业厂商提供,就会不够稳定、不够健壮。从当前最火的Facebook这样大型的网站都是使用MySQL数据库就可以看出,MySQL在稳定可靠性方面,并不会比商业厂商的产品逊色太多。而且排在全球前10位的大型网站里面,大部分都有部分业务是运行在MySQL数据库环境上的,如Yahoo、Google等。

总体来说,MySQL数据库在发展过程中一直追求三项原则:简单、高效、可靠。从上面简单的比较中也可以看出, MySQL在这三项原则上面,没有哪一项是做得不好的。而且,虽然功能并不是MySQL自身追求的原则之一,但是考虑到当前用户量急剧增长,用户需求越来越多样化,MySQL也不得不在功能方面作出大量的努力,以不断满足客户的新需求。比如最新版本中出现的Eent Scheduler(类似于Oracle的Job功能)、Partition功能,自主研发的Maria存储引擎在功能方面的扩展,Falcon存储引擎对事务的支持等,都证明了MySQL在功能方面也开始了不懈的努力。

任何一种产品,都不可能是绝对完美的,也不可能适用于所有用户。我们只有衡量了每一种产品的各种特性之后,从中选择出一种最适合自己的产品。1.3 MySQL的主要适用场景

据说目前MySQL用户数量已达千万,其中不乏企业级用户。可以说是目前最为流行的开源数据库管理系统软件。任何产品都不可能是万能的,也不可能适用于所有的应用场景,那么MySQL到底在什么场景下适用,什么场景下不适用呢?它适用的场景如下。1.Web网站系统

Web站点是MySQL最大的客户群,也是MySQL发展史上最为重要的支撑力量,这一点在最开始的MySQL Server简介部分就已经说明过。

MySQL之所以能成为Web站点开发者们最青睐的数据库管理系统,是因为MySQL数据库的安装配置都非常简单,其使用过程中的维护也不像很多大型商业数据库管理系统那么复杂,而且性能出色。还有一个非常重要的原因,就是MySQL是开放源代码的,完全可以免费使用。2.日志记录系统

MySQL数据库的插入和查询都非常高效,如果设计得较好,在使用MyISAM存储引擎的时候,两者可以做到互不锁定,具有很高的并发性能。所以,对需要大量插入和查询日志记录的系统,比如处理用户的登录日志、操作日志等,都是非常适合的应用系统。3.数据仓库系统

随着现在存储数据量的飞速增长,我们需要的存储空间也越来越大。数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难,怎么办?这里有几种主要的解决思路,一种是采用昂贵的高性能主机以提高计算性能,用高端存储设备提高I/O性能,这样做效果理想,但是成本非常高;第二种就是将数据复制到多台使用大容量硬盘的廉价PC Server上,以提高整体计算性能和I/O能力,这样实施效果尚可,存储空间虽有一定限制,但成本低廉;第三种,通过将数据水平拆分,使用多台廉价的PC Server和本地磁盘来存放数据,每台机器上面都只有所有数据的一部分,这样便解决了数据量的问题,所有PC Server一起并行计算,也解决了计算能力问题,通过中间代理程序调配各台机器的运算任务,既可以解决计算性能问题又可以解决I/O性能问题,成本也很低廉。在上面的三种方案中,对第二种和第三种方案,MySQL都有较大的优势。通过MySQL的简单复制功能,可以很好地将数据从一台主机复制到另外一台,不仅仅在局域网内,在广域网同样可以复制。当然,很多人可能会说,其他的数据库同样也可以做到,不是只有MySQL有这样的功能。确实,很多数据库同样能做到,但是MySQL是免费的,其他数据库大多是按照主机数量或CPU数量来收费的,当我们使用大量的PC Server的时候,license费用相当惊人。第一种方案,基本上所有数据库系统都能够实现,但是其高昂的成本并不是每一家公司都能够承担的。目前基于比较成熟的数据仓库解决方案主要是MySQL与Infobright相结合的DW系统。4.嵌入式系统

嵌入式环境对软件系统最大的限制是硬件资源非常有限,在嵌入式环境下运行的软件系统,必须是轻量级低消耗的软件。

MySQL在资源的使用方面伸缩性非常大,它可以在资源非常充裕的环境下运行,也可以在资源非常少的环境下正常运行。对于嵌入式环境来说,它是一种非常合适的数据库系统,而且MySQL有专门针对嵌入式环境的版本。1.4 小结

从最初的诞生,到发展成为目前最为流行的开源数据库管理软件,MySQL已经走过了较长的一段路,也正是这段不寻常的路,造就了今天MySQL的成就。

通过本章的信息,读者应该是比较清楚MySQL的大部分基本信息了,对MySQL主要特长,以及适用场景,都有了一个初步的了解。后续章节将会针对这些内容作更为详细深入的介绍。第2章 MySQL架构组成

2.0 引言

2.1 MySQL物理文件组成

2.2 MySQL Server系统架构

2.3 MySQL自带工具使用介绍

2.4 小结2.0 引言

麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构并不简单。本章从MySQL物理组成、逻辑组成,以及相关工具几个角度来介绍MySQL的整体架构,希望能够让读者对MySQL有一个更全面深入的了解。2.1 MySQL物理文件组成2.1.1 日志文件1.错误日志:Error Log

错误日志记录了MyQL Server运行过程中所有较为严重的警告和错误信息,以及MySQL Server每次启动和关闭的详细信息。在默认情况下,系统记录错误日志的功能是关闭的,错误信息被输出到标准错误输出(stderr),如果要开启系统记录错误日志的功能,须要在启动时开启--log-error选项。错误日志默认存放在数据目录下,以hostname.err命名。但是可以使用命令:--log-error[=file_name]修改其存放目录和文件名。

为了方便维护,有时候会希望将错误日志中的内容做备份并重新开始记录,这时候就可以利用MySQL的FLUSH LOGS命令来告诉MySQL备份旧日志文件并生成新的日志文件。备份文件名以“.old”结尾。2.二进制日志:Binary Log & Binary Log Index

二进制日志,也就是我们常说的binlog,是MySQL Server中最为重要的日志之一。在我们通过“--log-bin[=file_name]”打开记录的功能之后,MySQL会将所有修改数据库数据的Query以二进制形式记录到日志文件中。当然,日志中并不仅限于Query语句这么简单,还包括每一条Query所执行的时间,所消耗的资源,以及相关的事务信息,所以binlog是事务安全的。

和错误日志一样,binlog记录功能同样需要“--log-bin[=file_name]”参数的显式指定才能开启,如果未指定file_name,则会在数据目录下记录为mysql-bin.******(*代表0~9之间的某一个数字,表示该日志的序号)。

binlog还有其他一些附加选项参数:“--max_binlog_size”设置binlog的最大存储上限,当日志达到该上限时,MySQL会重新创建一个日志开始继续记录。不过偶尔也有超出该设置的binlog产生,一般都是因为在即将达到上限时,会产生一个较大的事务,为了保证事务安全,MySQL不会将同一个事务分开记录到两个binlog中。“--binlog-do-db=db_name”参数明确告诉MySQL,须要对某个(db_name)数据库记录binlog,如果有了“--binlog-do-db=db_name”参数的显式指定,MySQL会忽略针对其他数据库执行的Query,而仅仅记录针对指定数据库执行的Query。“--binlog-ignore-db=db_name”与“--binlog-do-db=db_name”完全相反,它显式指定忽略某个(db_name)数据库的binlog记录,在指定了这个参数之后,MySQL会记录指定数据库以外所有数据库的binlog。“--binlog-ignore-db=db_name”与“--binlog-do-db=db_name”两个参数有一个共同的概念须要大家理解清楚,参数中的db_name不是指Query语句更新的数据所在的数据库,而是执行Query时当前所处的数据库。不论更新哪个数据库的数据,MySQL仅仅比较当前连接所处的数据库(通过use db_name切换后所在的数据库)与参数设置的数据库名,而不会分析Query语句更新数据所在的数据库。

mysql-bin.index文件(binary log index)的功能是记录所有Binary Log的绝对路径,保证MySQL各种线程能够顺利地根据它找到所有需要的Binary Log文件。3.更新日志:update log

更新日志是MySQL在较老的版本上使用的,其功能和binlog基本类似,只不过不是以二进制格式来记录,而是以简单的文本格式记录内容。自从MySQL增加了binlog功能之后,就很少使用更新日志了。从版本5.0开始,MySQL已经不再支持更新日志。4.查询日志:query log

查询日志记录MySQL中所有的Query,可通过“--log[=fina_name]”来打开该日志。由于记录了所有的Query,包括所有的select,体积比较大,开启后对性能也有较大的影响,所以请大家慎用该功能。一般只在跟踪某些特殊的Query性能问题时才会短暂打开该功能。默认的查询日志文件名为hostname.log。5.慢查询日志:slow query log

顾名思义,慢查询日志中记录的是执行时间较长的Query,也就是我们常说的Slow Query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名,默认文件名为hostname-slow.log,默认目录也是数据目录。

慢查询日志采用的是简单的文本格式,可以通过各种文本编辑器查看其中的内容。其中记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。MySQL还提供了专门用来分析慢查询日志的工具程序mysqlslowdump,以帮助数据库管理人员解决可能存在的性能问题。6.InnoDB的在线REDO日志:InnoDB REDO Log

InnoDB是一个事务安全的存储引擎,其事务安全性主要是通过在线REDO日志和记录在表空间的UNDO信息来保证的。REDO日志中记录了InnoDB所做的所有物理变更和事务信息,通过REDO日志和UNDO信息,InnoDB保证了在任何情况下的事务安全性。InnoDB的REDO日志同样默认存放在数据目录下,可以通过innodb_log_group_home_dir来更改设置日志的存放位置,通过innodb_log_files_in_group设置日志的数量。2.1.2 数据文件

在MySQL中,每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中的各种表数据文件。不同的MySQL存储引擎有各自不同的数据文件,存放位置也有区别。多数存储引擎的数据文件都存放在和MyISAM数据文件位置相同的目录下,但是每个数据文件的扩展名却各不一样。如MyISAM用“.MYD”作为扩展名,InnoDB用“.ibd”,Archive用“.arc”,CSV用“.CSV”,等等。1.“.frm”文件

与表相关的元数据(meta)信息都存放在“.frm”文件,包括表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。2.“.MYD”文件“.MYD”文件是MyISAM存储引擎专用的,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,它同样存放于所属数据库的文件夹下,和“.frm”文件在一起。3.“.MYI”文件“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说,可以被缓存(cache)的内容主要就是来源于“.MYI”文件中。每一个MyISAM表对应一个“.MYI”文件,其存放的位置和“.frm”及“.MYD”一样。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载