高性能MySQL(第二版)(第19届Jolt Award获奖图书)(第二版着眼于健壮性、安全性及数据完整性)(china-pub首发)
基本信息
- 作者: Baron Schwartz Peter Zaitsev Vadim Tkachenko Jeremy D.Zawodny Arjen Lentz Derek J.Balling
- 译者: 王小东 李军 康建勋
- 丛书名: 电子工业出版社O'Reilly系列丛书
- 出版社:电子工业出版社
- ISBN:9787121102455
- 上架时间:2010-3-8
- 出版日期:2010 年1月
- 开本:16开
- 页码:530
- 版次:2-1
- 所属分类:
计算机 > 数据库 > MySQL
编辑推荐
汇聚著名MySQL专家在实践中构建大型系统的多年经验。
剖析MySQL内部工作机制,指导读者MySQL开发出快速可靠的系统。
实例讲解MySQL实用又安全的高性能之路。
推荐阅读
内容简介回到顶部↑
本书荣获2009年jolt图书大奖,是不可多得的分享mysql实用经验的图书。它不但可以帮助mysql初学者提高使用技巧,更为有经验的mysql dba指出了开发高性能mysql应用的途径。全书包含14章和4个附录,内容覆盖mysql系统架构、设计应用技巧、sql语句优化、服务器性能调优、系统配置管理和安全设置、监控分析,以及复制、扩展和备份/还原等主题,每一章的内容自成体系,适合各领域技术人员作选择性的阅读。
《高性能mysql》汇聚了著名mysql专家在实践中构建大型系统的多年宝贵经验,指导你如何使用mysql开发出快速可靠的系统。本书的第二版着眼于健壮性、安全性及数据完整性,涵盖了mysql性能的细微之处。
《高性能mysql》指导你深入mysql的高级技术,充分利用mysql的全部强大能力。你将学到如何设计mysql的表、索引、查询以及可以将性能发挥到极致的高级特性。另外,你还会在mysql服务器、操作系统、硬件调优方面得到具体的指导,以充分挖掘出它们的内在潜力。实用又安全的高性能之路就是通过复制来扩展你现有的应用系统,其中也包含了负载平衡、高可用性和故障恢复等技术。
本书第二版针对第一版作了彻底的修订,极大地扩充了原有内容,对所有领域进行了更深入的论述。新增的主要内容包括:
·始终强调性能和可靠性。
·全面论及各数据引擎,并深入讲解innodb的优化方法。
·介绍mysql 5.0和5.1的新特性,例如存储过程、分块数据库、触发器和视图。
·具体细致地讨论如何使用mysql构建出一个大型的、高伸缩性的系统。
·可用于备份和复制的新方法。
·对高级查询功能特性进行优化,例如全文检索。
·4篇全新的附录。
本书其他一些章节内容包括基准测试、性能分析、备份和安全,并介绍了一些工具和技术,帮你测量、监控和管理mysql实例。
《高性能mysql》汇聚了著名mysql专家在实践中构建大型系统的多年宝贵经验,指导你如何使用mysql开发出快速可靠的系统。本书的第二版着眼于健壮性、安全性及数据完整性,涵盖了mysql性能的细微之处。
《高性能mysql》指导你深入mysql的高级技术,充分利用mysql的全部强大能力。你将学到如何设计mysql的表、索引、查询以及可以将性能发挥到极致的高级特性。另外,你还会在mysql服务器、操作系统、硬件调优方面得到具体的指导,以充分挖掘出它们的内在潜力。实用又安全的高性能之路就是通过复制来扩展你现有的应用系统,其中也包含了负载平衡、高可用性和故障恢复等技术。
本书第二版针对第一版作了彻底的修订,极大地扩充了原有内容,对所有领域进行了更深入的论述。新增的主要内容包括:
·始终强调性能和可靠性。
·全面论及各数据引擎,并深入讲解innodb的优化方法。
·介绍mysql 5.0和5.1的新特性,例如存储过程、分块数据库、触发器和视图。
·具体细致地讨论如何使用mysql构建出一个大型的、高伸缩性的系统。
·可用于备份和复制的新方法。
·对高级查询功能特性进行优化,例如全文检索。
·4篇全新的附录。
本书其他一些章节内容包括基准测试、性能分析、备份和安全,并介绍了一些工具和技术,帮你测量、监控和管理mysql实例。
目录回到顶部↑
序
前言
第1章 mysql架构
1.1 mysql的逻辑架构
1.2 并发控制
1.3 事务
1.4 多版本并发控制
1.5 mysql的存储引擎
第2章 寻找瓶颈:基准测试与性能分析
2.1 为什么要进行基准测试
2.2 基准测试策略
2.3 基准测试工具
2.4 基准测试样例
2.5 性能分析(profiling)
2.6 分析操作系统
第3章 架构优化和索引
3.1 选择优化的数据类型
3.2 索引基础知识
3.3 高性能索引策略
3.4 索引实例研究
前言
第1章 mysql架构
1.1 mysql的逻辑架构
1.2 并发控制
1.3 事务
1.4 多版本并发控制
1.5 mysql的存储引擎
第2章 寻找瓶颈:基准测试与性能分析
2.1 为什么要进行基准测试
2.2 基准测试策略
2.3 基准测试工具
2.4 基准测试样例
2.5 性能分析(profiling)
2.6 分析操作系统
第3章 架构优化和索引
3.1 选择优化的数据类型
3.2 索引基础知识
3.3 高性能索引策略
3.4 索引实例研究
译者序回到顶部↑
在进入MySQL世界之前,先照例介绍一下MySQL的历史(况且本书里也没提到这些)。
真正以MySQL为名的数据库是从1994年开始开发的,并于1995年第一次呈现在小范围的用户面前,它的开发者刚好不是美国人,而是两个瑞典人Michael Widenius 和 David Axmark。那时的MySQL还非常简陋,除了在一个表上做一些Insert、Update、Delete和Select操作,恐怕没有更多的功能给用户使用。这种情况直到2001年左右发布3.23版的时候,才有了显著的进步——它支持大多数的基本SQL操作了,而且还集成了我们现在熟识的MyISAM和InnoDB存储引擎。然后又是几年不断完善的过程,到了2004年10月,这个夯实基础的过程到达了顶峰——4.1这个经典版本发布了。次年10月,又一里程碑式的MySQL版本发布了,在新出的MySQL 5.0 里加入了游标、存储过程、触发器、视图和事务的支持,准备进入中高端应用领域。在5.0之后的版本里,MySQL明确地表现出迈向高性能数据库的发展步伐。
到今天,MySQL已经上升到了600多万的装机量,著名的WordPress、phpBB都以MySQL为后台数据库,很多大型的WWW应用例如Wikipedia、Google和Facebook,也都采用了MySQL作为它们的数据存储系统。
反观国内,鉴于心照不宣的原因,MySQL的普及程度还不如SQL Server。就我这些年来的所见所闻而言,一直作为MySQL黄金搭档的PHP都常常使用别的数据库,更别提其他开发语言了。好在那些上规模企业,尤其是外资企业里,多数明智的IT负责人在项目前期都会提议使用MySQL,原因之一是它是免费的,一般不会产生授权费用问题,原因之二是它足够用了,不是吗?你想要的增、删、改、联接(Joint)、嵌套查询它都有;你想要的视图、存储过程、触发器、事务它也有;如果你要集群,它也能提供。
但是,使用MySQL是一回事,用好MySQL又是另外一回事。市面上更多的是关于MySQL开发的书籍,这些书籍的很多篇幅都花费在SQL语句的学习上。若要获得关于MySQL性能提高方面的资料,我们只能在网上的各个论坛或博客上披沙拣金了,而本书则系统性地从各个方面讲述一个高性能MySQL应用应该怎么来做。作者们都是这方面的行家里手,所以内容也是全面、充实,无论是架构师设计师、程序开发人员,还是系统管理员都能找到感兴趣的方面。在阅读正文前,最好能够先读一下作者精心编写的前言部分,通过它把握整本书内容的构成方式和相互关联,之后,带有目的性地阅读本书会更富有成效。
本书由李军、王小东、康建勋三人合作翻译完成,其中,康建勋翻译第1章和第2章前31页;王小东翻译第2章的后17页,以及第3章至第8章;李军翻译了序言、前言、第9章至第14章、所有附录,以及作者介绍、封面、封底等内容,并撰写了内容简介。翻译的过程也是译者与编辑、审阅人员之间交互的过程,在这个过程里,编辑徐定翔老师,审阅人金照林老师、柳安意老师给予了我们很大的帮助。如果说译者是生产毛坯的工匠,那么他们就是把毛坯打磨成精品呈现给读者的人,在此十分感谢他们!
同样地,我们也要感谢家人和朋友。我们把那些本来应该陪伴家人出游,或者参加朋友聚会的时间,都“自私”地用在翻译本书上了。他们都比较宽容,一句“到时要请客哦”就原谅了我们,谢谢他们的支持!
最后,得向读者们说声抱歉,由于术业专攻不同、识见浅深有别之故,译文中难免会有诘屈聱牙、词不达意甚至疏误之处,还请读者不吝指正。
译者
2009年12月
真正以MySQL为名的数据库是从1994年开始开发的,并于1995年第一次呈现在小范围的用户面前,它的开发者刚好不是美国人,而是两个瑞典人Michael Widenius 和 David Axmark。那时的MySQL还非常简陋,除了在一个表上做一些Insert、Update、Delete和Select操作,恐怕没有更多的功能给用户使用。这种情况直到2001年左右发布3.23版的时候,才有了显著的进步——它支持大多数的基本SQL操作了,而且还集成了我们现在熟识的MyISAM和InnoDB存储引擎。然后又是几年不断完善的过程,到了2004年10月,这个夯实基础的过程到达了顶峰——4.1这个经典版本发布了。次年10月,又一里程碑式的MySQL版本发布了,在新出的MySQL 5.0 里加入了游标、存储过程、触发器、视图和事务的支持,准备进入中高端应用领域。在5.0之后的版本里,MySQL明确地表现出迈向高性能数据库的发展步伐。
到今天,MySQL已经上升到了600多万的装机量,著名的WordPress、phpBB都以MySQL为后台数据库,很多大型的WWW应用例如Wikipedia、Google和Facebook,也都采用了MySQL作为它们的数据存储系统。
反观国内,鉴于心照不宣的原因,MySQL的普及程度还不如SQL Server。就我这些年来的所见所闻而言,一直作为MySQL黄金搭档的PHP都常常使用别的数据库,更别提其他开发语言了。好在那些上规模企业,尤其是外资企业里,多数明智的IT负责人在项目前期都会提议使用MySQL,原因之一是它是免费的,一般不会产生授权费用问题,原因之二是它足够用了,不是吗?你想要的增、删、改、联接(Joint)、嵌套查询它都有;你想要的视图、存储过程、触发器、事务它也有;如果你要集群,它也能提供。
但是,使用MySQL是一回事,用好MySQL又是另外一回事。市面上更多的是关于MySQL开发的书籍,这些书籍的很多篇幅都花费在SQL语句的学习上。若要获得关于MySQL性能提高方面的资料,我们只能在网上的各个论坛或博客上披沙拣金了,而本书则系统性地从各个方面讲述一个高性能MySQL应用应该怎么来做。作者们都是这方面的行家里手,所以内容也是全面、充实,无论是架构师设计师、程序开发人员,还是系统管理员都能找到感兴趣的方面。在阅读正文前,最好能够先读一下作者精心编写的前言部分,通过它把握整本书内容的构成方式和相互关联,之后,带有目的性地阅读本书会更富有成效。
本书由李军、王小东、康建勋三人合作翻译完成,其中,康建勋翻译第1章和第2章前31页;王小东翻译第2章的后17页,以及第3章至第8章;李军翻译了序言、前言、第9章至第14章、所有附录,以及作者介绍、封面、封底等内容,并撰写了内容简介。翻译的过程也是译者与编辑、审阅人员之间交互的过程,在这个过程里,编辑徐定翔老师,审阅人金照林老师、柳安意老师给予了我们很大的帮助。如果说译者是生产毛坯的工匠,那么他们就是把毛坯打磨成精品呈现给读者的人,在此十分感谢他们!
同样地,我们也要感谢家人和朋友。我们把那些本来应该陪伴家人出游,或者参加朋友聚会的时间,都“自私”地用在翻译本书上了。他们都比较宽容,一句“到时要请客哦”就原谅了我们,谢谢他们的支持!
最后,得向读者们说声抱歉,由于术业专攻不同、识见浅深有别之故,译文中难免会有诘屈聱牙、词不达意甚至疏误之处,还请读者不吝指正。
译者
2009年12月
前言回到顶部↑
对于这本书,我们在头脑里有好几个目标。其中的大多数源于我们一直想要有一本在书架上寻找却总是找不到的神话般完美的MySQL书,其他几个目标来自于想把我们的经验分享给那些把MySQL用在他们环境中的用户。
我们不想让这本书只是一本SQL入门书,不想让这本书的书名随意使用一些时限词语来开始或结尾(例如"……只需30天","7天内提高……"),也不想说服读者什么。最主要的,我们希望这本书能帮助你把技能提高一个层次,用MySQL构建出快速、可用的系统——它能解答类似这样的问题:"我怎么才能搭建起一个MySQL服务器集群,它能处理数以百万计的请求,哪怕有几台服务器宕机时,它仍然能正常提供服务?"
我们编写本书的着眼点不仅在于迎合MySQL应用开发人员的需求,还在于满足MySQL管理员的严格要求,管理员需要不管开发人员和用户怎么折腾,服务器都能挂在线上正常运行。如前所述,我们假定你已经具备了一些MySQL的相关经验,比较理想的就是你已经读过一本MySQL方面的入门书。我们同样也假定你具备一些常用的系统管理、网络和Unix风格操作系统等方面的经验。
经过修订、扩充后的第二版对于第一版里的所有主题都作了更深入的讲解,并增加了一些新的主题。这也部分地反映了自本书首次出版之后,MySQL世界发生的一些变化:MySQL现在已经成为软件中更大更复杂的一部分。如同其重要性一样,它的普及度也提高了:MySQL社区变得更加庞大,更多的大企业把MySQL应用到他们的关键业务系统中。自本书第一版发布以后,MySQL已被广泛认同可作为企业级应用。人们也越来越多地把MySQL用在互联网应用上,这些应用若发生故障和其他问题都无法被掩饰过去,也不能被容忍。
作为我们努力的结果,第二版的内容着重点跟第一版略有不同。我们会像强调性能一样,强调可用性和准确性,这部分由于我们自己也把MySQL用在那些运作着巨大金额的业务系统里。我们对Web应用也有着切身体验,MySQL在这方面正变得越来越普及。第二版里会谈论到在MySQL周边扩展的世界,而这个世界在第一版编写时还不存在。
本书是如何组织的
How This Book Is Organized
我们把许多复杂的主题放在一本书里,所以,在这里我们要解释一下它们的编排次序,使读者能更易于学习它们。
内容广泛的概述
A Broad Overview
第1章,MySQL Architecture,用于讲述基础知识——这些知识在你做更深入挖掘之前必须加以熟悉。你需要在高效利用MySQL前理解整个框架是如何被组织起来的。这一章解释了MySQL的架构和它存储引擎的关键方面。如果你还不熟悉关系数据库的一些基本概念及事务,它就能帮你更快地进入角色。如果本书就是你的MySQL入门书,这一章也非常有用,不过,你最好还是事先熟悉了另外一种数据库,例如Oracle。
构建一个坚实的基础
Building a Solid Foundation
接下来的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实现这些功能特性的方法跟其他数据库有点不一样,因此,对这些特性的深入理解能够帮你创造一个性能优化的新机会,这在以前你是不会想到的。
调优你的应用
Tuning Your Application
我们不想让这本书只是一本SQL入门书,不想让这本书的书名随意使用一些时限词语来开始或结尾(例如"……只需30天","7天内提高……"),也不想说服读者什么。最主要的,我们希望这本书能帮助你把技能提高一个层次,用MySQL构建出快速、可用的系统——它能解答类似这样的问题:"我怎么才能搭建起一个MySQL服务器集群,它能处理数以百万计的请求,哪怕有几台服务器宕机时,它仍然能正常提供服务?"
我们编写本书的着眼点不仅在于迎合MySQL应用开发人员的需求,还在于满足MySQL管理员的严格要求,管理员需要不管开发人员和用户怎么折腾,服务器都能挂在线上正常运行。如前所述,我们假定你已经具备了一些MySQL的相关经验,比较理想的就是你已经读过一本MySQL方面的入门书。我们同样也假定你具备一些常用的系统管理、网络和Unix风格操作系统等方面的经验。
经过修订、扩充后的第二版对于第一版里的所有主题都作了更深入的讲解,并增加了一些新的主题。这也部分地反映了自本书首次出版之后,MySQL世界发生的一些变化:MySQL现在已经成为软件中更大更复杂的一部分。如同其重要性一样,它的普及度也提高了:MySQL社区变得更加庞大,更多的大企业把MySQL应用到他们的关键业务系统中。自本书第一版发布以后,MySQL已被广泛认同可作为企业级应用。人们也越来越多地把MySQL用在互联网应用上,这些应用若发生故障和其他问题都无法被掩饰过去,也不能被容忍。
作为我们努力的结果,第二版的内容着重点跟第一版略有不同。我们会像强调性能一样,强调可用性和准确性,这部分由于我们自己也把MySQL用在那些运作着巨大金额的业务系统里。我们对Web应用也有着切身体验,MySQL在这方面正变得越来越普及。第二版里会谈论到在MySQL周边扩展的世界,而这个世界在第一版编写时还不存在。
本书是如何组织的
How This Book Is Organized
我们把许多复杂的主题放在一本书里,所以,在这里我们要解释一下它们的编排次序,使读者能更易于学习它们。
内容广泛的概述
A Broad Overview
第1章,MySQL Architecture,用于讲述基础知识——这些知识在你做更深入挖掘之前必须加以熟悉。你需要在高效利用MySQL前理解整个框架是如何被组织起来的。这一章解释了MySQL的架构和它存储引擎的关键方面。如果你还不熟悉关系数据库的一些基本概念及事务,它就能帮你更快地进入角色。如果本书就是你的MySQL入门书,这一章也非常有用,不过,你最好还是事先熟悉了另外一种数据库,例如Oracle。
构建一个坚实的基础
Building a Solid Foundation
接下来的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实现这些功能特性的方法跟其他数据库有点不一样,因此,对这些特性的深入理解能够帮你创造一个性能优化的新机会,这在以前你是不会想到的。
调优你的应用
Tuning Your Application
序言回到顶部↑
我认识 Peter、Vadim和Arjen已经有很长一段时间,见证了他们长久以来在自己项目上使用MySQL和为各类高标准客户调优MySQL服务器的历史。另一方面,Baron为增强MySQL的功能编写了许多客户端软件。
作者们的专业背景清晰地反映在了彻底重写《High Performance MySQL: Optimizations, Replication,Backups,and More》第二版的工作里。这本书不只告诉你如何优化工作,从而能比以前更好地使用MySQL,作者们还做了大量额外的工作,亲自编制执行基准测试,并将结果发布出来以佐证他们的观点。这些信息让读者可以借此获悉许多很有价值的MySQL内部工作机制——这在其他书中是难以得到的;同样,这些信息也能帮助读者避开那些在将来会引发糟糕性能的错误。
我不但要向刚刚接触MySQL服务器,正准备编写第一个MySQL应用的初学者推荐这本书,还要向富有经验的用户推荐这本书,他们已经对基于MySQL的应用作过一些调优的工作,现在正需要在这个方向上再前进“一小步”。
-Michael Widenius
2008年3月
作者们的专业背景清晰地反映在了彻底重写《High Performance MySQL: Optimizations, Replication,Backups,and More》第二版的工作里。这本书不只告诉你如何优化工作,从而能比以前更好地使用MySQL,作者们还做了大量额外的工作,亲自编制执行基准测试,并将结果发布出来以佐证他们的观点。这些信息让读者可以借此获悉许多很有价值的MySQL内部工作机制——这在其他书中是难以得到的;同样,这些信息也能帮助读者避开那些在将来会引发糟糕性能的错误。
我不但要向刚刚接触MySQL服务器,正准备编写第一个MySQL应用的初学者推荐这本书,还要向富有经验的用户推荐这本书,他们已经对基于MySQL的应用作过一些调优的工作,现在正需要在这个方向上再前进“一小步”。
-Michael Widenius
2008年3月
媒体评论回到顶部↑
“我不但要向刚刚接触MYSQL服务器正准备编写第一个MySQL应用的初学者推荐这本书,还要向富有经验的用户推荐这本书,他们已经对基于MySQL的应用做过一些调优,现在正需要在这个方向上再前进‘一小步’”
——Michael Widenius,MySQL最初开发者
——Michael Widenius,MySQL最初开发者


点击看大图






加载中...
