出版时间:2009年6月 出版社:电子工业出版社 作者:简朝阳 页数:392
Tag标签:无
前言
我的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 中的崔北亮、唐一丁、蔡永航、曾军、陈刚、罗修杰、陈征、李杰、陈永伟、徐小慧和刘梦欢及其他所有同学,是你们的帮助与支持让我得到了更快的成长。
内容概要
《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 邮件组,欢迎大家以 Open 的心态一起分享MySQL数据库方面的经验心得。
书籍目录
"第1篇 基础篇 1第1章 MySQL基本介绍 31.0 引言 41.1 MySQL Server简介 41.2 MySQL与其他数据库的简单比较 61.3 MySQL 的主要适用场景 81.4 小结 9第2章 MySQL架构组成 112.0 引言 122.1 MySQL物理文件组成 122.2 MySQL Server系统架构 162.3 MySQL 自带工具使用介绍 222.4 小结 26第3章 MySQL存储引擎简介 273.0 引言 283.1 MySQL存储引擎概述 283.2 MyISAM存储引擎简介 293.3 InnoDB存储引擎简介 303.4 NDB Cluster 存储引擎简介 323.5 其他存储引擎介绍 343.6 小结 37第4章 MySQL安全管理 394.0 引言 404.1 数据库系统安全相关因素 404.2 MySQL 权限系统介绍 434.3 MySQL 访问授权策略 544.4 安全设置注意事项 554.5 小结 57第5章 MySQL备份与恢复 595.0 引言 605.1 数据库备份使用场景 605.2 逻辑备份与恢复测试 615.3 物理备份与恢复测试 685.4 备份策略的设计思路 755.5 小结 76第2篇 性能优化篇 77第6章 影响MySQL Server性能的相关因素 796.0 引言 806.1 商业需求对性能的影响 806.2 系统架构及实现对性能的影响 836.3 Query语句对系统性能的影响 896.4 Schema设计对系统的性能影响 966.5 硬件环境对系统性能的影响 996.6 小结 102第7章 MySQL数据库锁定机制 1037.0 引言 1047.1 MySQL锁定机制简介 1047.2 各种锁定机制分析 1067.3 合理利用锁机制优化MySQL 1177.4 小结 120第8章 MySQL数据库Query的优化 1218.0 引言 1228.1 理解MySQL的Query Optimizer 1228.2 Query 语句优化基本思路和原则 1238.3 充分利用 Explain 和 Profiling 1308.4 合理设计并利用索引 1368.5 Join的实现原理及优化思路 1498.6 ORDER BY、GROUP BY和DISTINCT的优化 1558.7 小结 167第9章 MySQL数据库Schema 设计的性能优化 1699.0 引言 1709.1 高效的模型设计 1709.2 合适的数据类型 1769.3 规范的对象命名 1809.4 小结 181第10章 MySQL Server性能优化 18310.0 引言 18410.1 MySQL安装优化 18410.2 MySQL日志设置优化 18810.3 Query Cache 优化 19210.4 MySQL Server 其他常用优化 19610.5 小结 202第11章 常用存储引擎优化 20311.0 引言 20411.1 MyISAM存储引擎优化 20411.2 InnoDB 存储引擎优化 21111.3 小结 227第3篇 架构设计篇 229第12章 MySQL可扩展设计的基本原则 23112.0 引言 23212.1 什么是可扩展性 23212.2 事务相关性最小化原则 23412.3 数据一致性原则 23512.4 高可用及数据安全原则 23712.5 小结 237第13章 可扩展性设计之 MySQL Replication 23913.0 引言 24013.1 Replication 对可扩展性设计的意义 24013.2 Replication 机制的实现原理 24113.3 Replication常用架构 24413.4 Replication 搭建实现 24913.5 小结 255第14章 可扩展性设计之数据切分 25714.0 引言 25814.1 何谓数据切分 25814.2 数据的垂直切分 25914.3 数据的水平切分 26114.4 垂直与水平联合切分的使用 26314.5 数据切分及整合方案 26514.6 数据切分与整合中可能存在的问题 27114.7 小结 273第15章 可扩展性设计之Cache与Search的利用 27515.0 引言 27615.1 可扩展设计的数据库之外延伸 27615.2 合理利用第三方Cache解决方案 27715.3 自行实现Cache服务 28415.4 利用Search实现高效的全文检索 28515.5 利用分布式并行计算实现大数据量的高性能运算 28715.6 小结 288第16章 MySQL Cluster 28916.0 引言 29016.1 MySQL Cluster介绍 29016.2 MySQL Cluster环境搭建 29216.3 MySQL Cluster配置详细介绍(config.ini) 29816.4 MySQL Cluster基本管理与维护 30416.5 基本优化思路 30716.6 小结 308第17章 高可用设计思路及方案 30917.0 引言 31017.1 利用 Replication 来实现高可用架构 31017.2 利用MySQL Cluster实现整体高可用 31617.3 利用DRBD保证数据的高安全可靠 32017.4 其他高可用设计方案 32317.5 各种高可用方案的利弊比较 32617.6 小结 327第18章 高可用设计之MySQL监控 32918.0 引言 33018.1 监控系统设计 33018.2 健康状态监控 33218.3 性能状态监控 33518.4 常用开源监控软件 34218.5 小结 344附录A 实验测试Schema创建脚本 345附录B MySQL部分系统参数说明及设置建议 349附录C MySQL部分状态说明 373索引 389"
章节摘录
第2章 MySQL架构组成 2.0 引言 麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构并不简单。本章从MySQL物理组成、逻辑组成,以及相关工具几个角度来介绍MySQL的整体架构,希望能够让读者对MySQL有一个更全面深入的了解。 2.1 MySQL物理文件组成 2.1.1 日志文件 1.错误日志:Error Log 错误日志记录了MyQL Server运行过程中所有较为严重的警告和错误信息,以及MySQLServer每次启动和关闭的详细信息。在默认情况下,系统记录错误日志的功能是关闭的,错误信息被输出到标准错误输出(stderr),如果要开启系统记录错误日志的功能,须要在启动时开启-log-error选项。错误日志默认存放在数据目录下,以hostname.err命名。但是可以使用命令:-log-error[=file_name]修改其存放目录和文件名。 为了方便维护,有时候会希望将错误日志中的内容做备份并重新开始记录,这时候就可以利用MySQL的FLUSH LOGS命令来告诉MySQL备份旧日志文件并生成新的日志文件。备份文件名以“.old”结尾。
编辑推荐
支付宝架构师冯大辉、淘宝首席DBA陈吉平、阿里巴巴首席DBA冯春培、网易高级DBA翟振兴、搜狐高级DBA叶金荣、百度高级DBA吴诗展等6位数据库专家作序推荐 初级DBA到LAMP架构设计师必备利器 剖析高性能高可用MySQL调优方法 探索低成本数据库系统构建之道
图书封面
图书标签Tags
无
评论、评分、阅读与下载