MySQL性能调优与架构设计(博文视点LAMP精品书廊)
分類: 图书,计算机与互联网,数据库,MySQL,
品牌: 简朝阳
基本信息·出版社:电子工业出版社
·页码:392 页
·出版日期:2009年
·ISBN:7121087405/9787121087400
·条形码:9787121087400
·包装版本:1
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:博文视点LAMP精品书廊
产品信息有问题吗?请帮我们更新产品信息。
内容简介《MySQL性能调优与架构设计》以 MySQL 数据库的基础及维护为切入点,重点介绍了 MySQL 数据库应用系统的性能调优,以及高可用可扩展的架构设计。
全书共分3篇,基础篇介绍了MySQL软件的基础知识、架构组成、存储引擎、安全管理及基本的备份恢复知识。性能优化篇从影响 MySQL 数据库应用系统性能的因素开始,针对性地对各个影响因素进行调优分析。如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式企业级数据库集群环境为目标,分析介绍了通过 MySQL 实现这一目标的多种架构方式。主要包括可扩展和高可用两部分内容,可扩展部分包括设计原则、Replication 的利用、数据切分、如何使用 Cache 和 Search,以及 NDB Cluster等内容。高可用则主要包括 Dual Master、DRBD、NDB Cluster,以及系统监控等方面。
本书主要面向有一定的 MySQL 基础或至少有一定SQL语言基础的读者朋友。
作者简介简朝阳,毕业于南京工业大学管理科学与工程学院,管理学学士。擅长MySQL & Oracle数据库应用系统的性能调优与高可用可扩展架构设计,有一定的Java 和C语言基础。目前就职于阿里巴巴(中国)网络技术有限公司,曾参与过公司多个核心数据库应用系统的设计与实施,目前主要负责 MySQL 数据库应用系统的架构设计与相关维护工作。活跃于 iMySQLer 数据库论坛和 MySQL 邮件组。
编辑推荐 《MySQL性能调优与架构设计》:支付宝架构师冯大辉、淘宝首席DBA陈吉平、阿里巴巴首席DBA冯春培、网易高级DBA翟振兴、搜狐高级DBA叶金荣、百度高级DBA吴诗展等6位数据库专家作序推荐
初级DBA到LAMP架构设计师必备利器
剖析高性能高可用MySQL调优方法
探索低成本数据库系统构建之道
目录
"第1篇 基础篇 1
第1章 MySQL基本介绍 3
1.0 引言 4
1.1 MySQL Server简介 4
1.2 MySQL与其他数据库的简单比较 6
1.3 MySQL 的主要适用场景 8
1.4 小结 9
第2章 MySQL架构组成 11
2.0 引言 12
2.1 MySQL物理文件组成 12
2.2 MySQL Server系统架构 16
2.3 MySQL 自带工具使用介绍 22
2.4 小结 26
第3章 MySQL存储引擎简介 27
3.0 引言 28
3.1 MySQL存储引擎概述 28
3.2 MyISAM存储引擎简介 29
3.3 InnoDB存储引擎简介 30
3.4 NDB Cluster 存储引擎简介 32
3.5 其他存储引擎介绍 34
3.6 小结 37
第4章 MySQL安全管理 39
4.0 引言 40
4.1 数据库系统安全相关因素 40
4.2 MySQL 权限系统介绍 43
4.3 MySQL 访问授权策略 54
4.4 安全设置注意事项 55
4.5 小结 57
第5章 MySQL备份与恢复 59
5.0 引言 60
5.1 数据库备份使用场景 60
5.2 逻辑备份与恢复测试 61
5.3 物理备份与恢复测试 68
5.4 备份策略的设计思路 75
5.5 小结 76
第2篇 性能优化篇 77
第6章 影响MySQL Server性能的相关因素 79
6.0 引言 80
6.1 商业需求对性能的影响 80
6.2 系统架构及实现对性能的影响 83
6.3 Query语句对系统性能的影响 89
6.4 Schema设计对系统的性能影响 96
6.5 硬件环境对系统性能的影响 99
6.6 小结 102
第7章 MySQL数据库锁定机制 103
7.0 引言 104
7.1 MySQL锁定机制简介 104
7.2 各种锁定机制分析 106
7.3 合理利用锁机制优化MySQL 117
7.4 小结 120
第8章 MySQL数据库Query的优化 121
8.0 引言 122
8.1 理解MySQL的Query Optimizer 122
8.2 Query 语句优化基本思路和原则 123
8.3 充分利用 Explain 和 Profiling 130
8.4 合理设计并利用索引 136
8.5 Join的实现原理及优化思路 149
8.6 ORDER BY、GROUP BY和DISTINCT的优化 155
8.7 小结 167
第9章 MySQL数据库Schema 设计的性能优化 169
9.0 引言 170
9.1 高效的模型设计 170
9.2 合适的数据类型 176
9.3 规范的对象命名 180
9.4 小结 181
第10章 MySQL Server性能优化 183
10.0 引言 184
10.1 MySQL安装优化 184
10.2 MySQL日志设置优化 188
10.3 Query Cache 优化 192
10.4 MySQL Server 其他常用优化 196
10.5 小结 202
第11章 常用存储引擎优化 203
11.0 引言 204
11.1 MyISAM存储引擎优化 204
11.2 InnoDB 存储引擎优化 211
11.3 小结 227
第3篇 架构设计篇 229
第12章 MySQL可扩展设计的基本原则 231
12.0 引言 232
12.1 什么是可扩展性 232
12.2 事务相关性最小化原则 234
12.3 数据一致性原则 235
12.4 高可用及数据安全原则 237
12.5 小结 237
第13章 可扩展性设计之 MySQL Replication 239
13.0 引言 240
13.1 Replication 对可扩展性设计的意义 240
13.2 Replication 机制的实现原理 241
13.3 Replication常用架构 244
13.4 Replication 搭建实现 249
13.5 小结 255
第14章 可扩展性设计之数据切分 257
14.0 引言 258
14.1 何谓数据切分 258
14.2 数据的垂直切分 259
14.3 数据的水平切分 261
14.4 垂直与水平联合切分的使用 263
14.5 数据切分及整合方案 265
14.6 数据切分与整合中可能存在的问题 271
14.7 小结 273
第15章 可扩展性设计之Cache与Search的利用 275
15.0 引言 276
15.1 可扩展设计的数据库之外延伸 276
15.2 合理利用第三方Cache解决方案 277
15.3 自行实现Cache服务 284
15.4 利用Search实现高效的全文检索 285
15.5 利用分布式并行计算实现大数据量的高性能运算 287
15.6 小结 288
第16章 MySQL Cluster 289
16.0 引言 290
16.1 MySQL Cluster介绍 290
16.2 MySQL Cluster环境搭建 292
16.3 MySQL Cluster配置详细介绍(config.ini) 298
16.4 MySQL Cluster基本管理与维护 304
16.5 基本优化思路 307
16.6 小结 308
第17章 高可用设计思路及方案 309
17.0 引言 310
17.1 利用 Replication 来实现高可用架构 310
17.2 利用MySQL Cluster实现整体高可用 316
17.3 利用DRBD保证数据的高安全可靠 320
17.4 其他高可用设计方案 323
17.5 各种高可用方案的利弊比较 326
17.6 小结 327
第18章 高可用设计之MySQL监控 329
18.0 引言 330
18.1 监控系统设计 330
18.2 健康状态监控 332
18.3 性能状态监控 335
18.4 常用开源监控软件 342
18.5 小结 344
附录A 实验测试Schema创建脚本 345
附录B MySQL部分系统参数说明及设置建议 349
附录C MySQL部分状态说明 373
索引 389
"
……[看更多目录]
序言我的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 中的崔北亮、唐一丁、蔡永航、曾军、陈刚、罗修杰、陈征、李杰、陈永伟、徐小慧和刘梦欢及其他所有同学,是你们的帮助与支持让我得到了更快的成长。