实践经验汇集成的MySQL应用指南

 http://www.china-pub.com/196341

【书名】高性能MySQL(第二版)

【原书名】High Performance MySQL, second edition

【作者】Baron SchwartzPeter ZaitsevVadim TkachenkoJeremy D.ZawodnyArjen LentzDerek J.Balling 

【译者】王小东 李军 康建勋

【出版社】电子工业出版社    

【书号】978-7-121-10245-5

【上市日期】20101

 

【内容简介】

本书荣获2009Jolt图书大奖,是不可多得的分享MySQL实用经验的图书。它不但可以帮助MySQL初学者提高使用技巧,更为有经验的MySQL DBA指出了开发高性能MySQL应用的途径。全书包含14章和4个附录,内容覆盖MySQL系统架构、设计应用技巧、SQL语句优化、服务器性能调优、系统配置管理和安全设置、监控分析,以及复制、扩展和备份/还原等主题,每一章的内容自成体系,适合各领域技术人员作选择性的阅读。

l  汇聚著名MySQL专家在实践中构建大型系统的多年经验。

l  剖析MySQL内部工作机制,指导读者MySQL开发出快速可靠的系统。

l  实例讲解MySQL实用又安全的高性能之路。

【译者序】

在进入MySQL世界之前,先照例介绍一下MySQL的历史(况且本书里也没提到这些)。

真正以MySQL为名的数据库是从1994年开始开发的,并于1995年第一次呈现在小范围的用户面前,它的开发者刚好不是美国人,而是两个瑞典人Michael Widenius David Axmark。那时的MySQL还非常简陋,除了在一个表上做一些InsertUpdateDeleteSelect操作,恐怕没有更多的功能给用户使用。这种情况直到2001年左右发布3.23版的时候,才有了显著的进步—它支持大多数的基本SQL操作了,而且还集成了我们现在熟识的MyISAMInnoDB存储引擎。然后又是几年不断完善的过程,到了200410月,这个夯实基础的过程到达了顶峰——4.1这个经典版本发布了。次年10月,又一里程碑式的MySQL版本发布了,在新出的MySQL 5.0 里加入了游标、存储过程、触发器、视图和事务的支持,准备进入中高端应用领域。在5.0之后的版本里,MySQL明确地表现出迈向高性能数据库的发展步伐。

到今天,MySQL已经上升到了600多万的装机量,著名的WordPressphpBB都以MySQL为后台数据库,很多大型的WWW应用例如WikipediaGoogleFacebook,也都采用了MySQL作为它们的数据存储系统。

反观国内,鉴于心照不宣的原因,MySQL的普及程度还不如SQL Server。就我这些年来的所见所闻而言,一直作为MySQL黄金搭档的PHP都常常使用别的数据库,更别提其他开发语言了。好在那些上规模企业,尤其是外资企业里,多数明智的IT负责人在项目前期都会提议使用MySQL,原因之一是它是免费的,一般不会产生授权费用问题,原因之二是它足够用了,不是吗?你想要的增、删、改、联接(Joint)、嵌套查询它都有;你想要的视图、存储过程、触发器、事务它也有;如果你要集群,它也能提供。

但是,使用MySQL是一回事,用好MySQL又是另外一回事。市面上更多的是关于MySQL开发的书籍,这些书籍的很多篇幅都花费在SQL语句的学习上。若要获得关于MySQL性能提高方面的资料,我们只能在网上的各个论坛或博客上披沙拣金了,而本书则系统性地从各个方面讲述一个高性能MySQL应用应该怎么来做。作者们都是这方面的行家里手,所以内容也是全面、充实,无论是架构师设计师、程序开发人员,还是系统管理员都能找到感兴趣的方面。在阅读正文前,最好能够先读一下作者精心编写的前言部分,通过它把握整本书内容的构成方式和相互关联,之后,带有目的性地阅读本书会更富有成效。

本书由李军、王小东、康建勋三人合作翻译完成,其中,康建勋翻译第1章和第2章前31页;王小东翻译第2章的后17页,以及第3章至第8章;李军翻译了序言、前言、第9章至第14章、所有附录,以及作者介绍、封面、封底等内容,并撰写了内容简介。翻译的过程也是译者与编辑、审阅人员之间交互的过程,在这个过程里,编辑徐定翔老师,审阅人金照林老师、柳安意老师给予了我们很大的帮助。如果说译者是生产毛坯的工匠,那么他们就是把毛坯打磨成精品呈现给读者的人,在此十分感谢他们!

同样地,我们也要感谢家人和朋友。我们把那些本来应该陪伴家人出游,或者参加朋友聚会的时间,都“自私”地用在翻译本书上了。他们都比较宽容,一句“到时要请客哦”就原谅了我们,谢谢他们的支持!

最后,得向读者们说声抱歉,由于术业专攻不同、识见浅深有别之故,译文中难免会有诘屈聱牙、词不达意甚至疏误之处,还请读者不吝指正。

 

译者
200912

【前言】

对于这本书,我们在头脑里有好几个目标。其中的大多数源于我们一直想要有一本在书架上寻找却总是找不到的神话般完美的MySQL书,其他几个目标来自于想把我们的经验分享给那些把MySQL用在他们环境中的用户。

我们不想让这本书只是一本SQL入门书,不想让这本书的书名随意使用一些时限词语来开始或结尾(例如“……只需30天”,“7天内提高……”),也不想说服读者什么。最主要的,我们希望这本书能帮助你把技能提高一个层次,用MySQL构建出快速、可用的系统——它能解答类似这样的问题:“我怎么才能搭建起一个MySQL服务器集群,它能处理数以百万计的请求,哪怕有几台服务器宕机时,它仍然能正常提供服务?”

我们编写本书的着眼点不仅在于迎合MySQL应用开发人员的需求,还在于满足MySQL管理员的严格要求,管理员需要不管开发人员和用户怎么折腾,服务器都能挂在线上正常运行。如前所述,我们假定你已经具备了一些MySQL的相关经验,比较理想的就是你已经读过一本MySQL方面的入门书。我们同样也假定你具备一些常用的系统管理、网络和Unix风格操作系统等方面的经验。

经过修订、扩充后的第二版对于第一版里的所有主题都作了更深入的讲解,并增加了一些新的主题。这也部分地反映了自本书首次出版之后,MySQL世界发生的一些变化:MySQL现在已经成为软件中更大更复杂的一部分。如同其重要性一样,它的普及度也提高了:MySQL社区变得更加庞大,更多的大企业把MySQL应用到他们的关键业务系统中。自本书第一版发布以后,MySQL已被广泛认同可作为企业级应用。人们也越来越多地把MySQL用在互联网应用上,这些应用若发生故障和其他问题都无法被掩饰过去,也不能被容忍。

作为我们努力的结果,第二版的内容着重点跟第一版略有不同。我们会像强调性能一样,强调可用性和准确性,这部分由于我们自己也把MySQL用在那些运作着巨大金额的业务系统里。我们对Web应用也有着切身体验,MySQL在这方面正变得越来越普及。第二版里会谈论到在MySQL周边扩展的世界,而这个世界在第一版编写时还不存在。

本书是如何组织的

我们把许多复杂的主题放在一本书里,所以,在这里我们要解释一下它们的编排次序,使读者能更易于学习它们。

内容广泛的概述

1章,MySQL Architecture,用于讲述基础知识——这些知识在你做更深入挖掘之前必须加以熟悉。你需要在高效利用MySQL前理解整个框架是如何被组织起来的。这一章解释了MySQL的架构和它存储引擎的关键方面。如果你还不熟悉关系数据库的一些基本概念及事务,它就能帮你更快地进入角色。如果本书就是你的MySQL入门书,这一章也非常有用,不过,你最好还是事先熟悉了另外一种数据库,例如Oracle

构建一个坚实的基础

接下来的4章涉及了你在使用MySQL时会几次三番来查阅的资料。

2章,Finding Bottlenecks: Benchmarking and Profiling,讨论了基准测试和获取系统概况的基础。它们决定了你的系统能处理哪一类型的工作负荷、执行某些任务时它能运行得多快等。你会希望在做重要更改的前后都能对你的应用做一次基准测试,这样就可以判断出这些更改产生了多大的效果。有些看似正面的更改在真实世界的负载压力下可能会变成负面的影响,除非你能精确地对其进行衡量,否则你是永远都不会知道到底是什么导致糟糕的系统性能。

3章,Schema Optimization and Indexing,我们会介绍各数据类型的细微差别、表的设计和索引的创建。一个设计良好的数据库能有助于MySQL获得更佳的性能表现。在接下来的那些章节里,我们讲到的很多内容的关键点都在于你的应用是怎么使用MySQL索引的。深刻认识索引及如何巧妙地运用它们是高效使用MySQL的核心所在,所以,你可能会经常地回过来重新阅读这一章。

4章,Query Performance Optimization,解释了MySQL是怎样执行查询的,以及怎么才能利用查询优化器的能力。深入领会查询优化器的工作方法能帮你在编写查询时创造奇迹,也能帮你更好地理解索引(索引和查询优化的次序就像“先有鸡还是先有蛋”的问题,读完第4章后再回过去读第3章可能会让你受益匪浅。)该一章里还特别展示了那些常见的查询示例,用来说明MySQL所擅长的是哪方面的工作,怎么把查询转换成能够利用查询优化器强大能力的形式。

为了更好地做到这一点,我们已经讲述过对任何数据库都适用的一些基本概念:表、索引、数据和查询。第5章,Advanced MySQL Features,将在上述基础之上再进一步,向你展示MySQL内部那些更高层次的框架是如何运作的。我们会介绍查询缓存、存储过程、触发器、字符集等内容。MySQL实现这些功能特性的方法跟其他数据库有点不一样,因此,对这些特性的深入理解能够帮你创造一个性能优化的新机会,这在以前你是不会想到的。

调优你的应用

接下来的两章讨论如何修改你的基于MySQL的应用,使它能在性能上得到提升。

6章,Optimizing Server Settings,我们讨论的是如何调优MySQL,使它能在最大程度上让硬件特性为你的特定应用服务。第7章,Operating System and Hardware Optimization,我们解释了如何充分利用你的操作系统和硬件配置,同时为大规模应用提供了某些能提高性能的硬件配置建议。

配置更改之后的向上扩展

一台服务器往往是不够用的。第8章,Replication,介绍如何把将数据自动地复制到多台服务器上。第9章,“伸缩性和高可用性”,讲述如何将伸缩性、负载平衡和高可用性综合起来运用,为应用伸展到你所需要的程度提供基础性工作。

当应用运行在一个大规模的MySQL后端之上时,它本身就蕴含了意义非凡的优化机会。设计一个大型应用有更好的途径,也有更坏的途径,但这不是本书的着重点,我们不希望你把所有的时间都专注于MySQL之上。第10章,“应用层面的优化”,帮助你发现那些悬挂在靠近地面枝头上的柿子,特别是对于Web应用。

增强应用的可靠性

哪怕是世界上设计得最好、伸缩性最强的架构,如果它不能在掉电、恶意攻击、程序Bug、程序员的过失,以及其他灾难中幸存下来,那它也算不上是好的架构。

11章,“备份和还原”,我们会讨论到不同的MySQL数据库备份和还原策略。这些策略都有助于在系统遭受到不可避免的硬件错误时最小化故障停机时间,遭遇到各种灾难时确保你的数据安全。

12章,“安全”,能让你对运行MySQL服务器涉及的安全因素有深入的认识。最重要的是,我们给你提供了很多建议,防止来自外部的攻击威胁你苦心优化、配置过的服务器。我们还会指出几个很少见的暴露出数据库安全问题的地方,并展示不同的实施方法的好处及对性能的影响。通常情况下,就性能方面而言,保持安全策略简单化是值得的。

其他有用的主题

最后的几个章节和附录里,我们深入研究了几个既不“适合”放入前面任何一个章节中,又被多个章节反复引用的内容,它们值得特别关注。

13章,“MySQL服务器的状态”,展示的是如何检查MySQL服务器运行情况。知道如何获取服务器的状态信息很重要,知道那些信息包含的意思更加重要。我们针对SHOW INNODB STATUS作了特别具体的讲解,它能提供关于InnoDB事务存储引擎的更深层次的操作信息。

14章,“用于高性能的MySQL工具”,介绍了一些能帮你更有效管理MySQL的工具。这些工具包括监控和分析工具,以及能帮你编写查询语句的工具等。其中提到的Maatkit是由Baron创建的,它能够增强MySQL的功能性,使你的数据库管理员的生活更加轻松。在该章里也演示了一个名叫innotop的程序,这个程序是Baron写的,其目的是提供一个易于使用的查看MySQL正在做什么的用户接口,它的功能与Uninxtop命令类似。在调优MySQL各阶段里,你若要监控MySQL和它的存储引擎里发生的情况,它就是一个很有价值的工具。

    附录A,“大文件传输”,展示如何高效地把很大的文件从一个地方复制到另一个地方——这在大数据量管理时肯定会用到。附录B,“使用EXPLAIN”,展示如何真正理解和使用那个重要的EXPLAIN命令。附录C,“在MySQL里使用Sphinx”是对Sphinx的一个介绍,这个高性能全文索引系统是对MySQL自有功能的一个补充。最后的附录D,“锁的调试”,向你展示的是当几个查询在请求锁时相互妨碍时,该如何去破译其中的缘由。

 

扩展阅读

MySQL性能调优与架构设计》

互动网热卖地址:http://www.china-pub.com/195636

豆瓣主页:http://www.douban.com/subject/3729677/ 

 

 

posted @ 2010-01-22 14:19  博文视点  阅读(622)  评论(0编辑  收藏  举报