深入浅出MySQL:数据库开发、优化与管理维护(第2版).pdf 作者-唐汉明 翟振兴 关宝军 王洪权 黄潇 著655页
内容简介:
《深入浅出MySQL:数据库开发、优化与管理维护(第 2版)》从数据库的基础、开发、优化、管理维护和架构5个方面对MySQL进行了详细的介绍,每一部分都独立成篇。基础篇主要适合于MySQL的初学者阅读,包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。开发篇主要适合于MySQL的设计和开发人员阅读,内容包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、
目录菜单:
封面,扉页,序,前言,第一部分 基础篇,第1章 MySQL的安装与配置,第2章 SQL基础,第3章 MySQL支持的数据类型,第4章 MySQL中的运算符,第5章 常用函数,第6章 图形化工具的使用,第二部分 开发篇,第7章 表类型(存储引擎)的选择,第8章 选择合适的数据类型,第9章 字符集,第10章 索引的设计和使用,第11章 视图,第12章 存储过程和函数,第13章 触发器,第14章 事务控制和锁定语句,第15章 SQL中的安全问题,第16章 SQL Mode及相关问题,第17章 MySQL分区,第三部分 优化篇,第18章 SQL优化,第19章 优化数据库对象,第20章 锁问题,第21章 优化MySQL Server,第22章 磁盘I/O问题,第23章 应用优化,第四部分 管理维护篇,第24章 MySQL高级安装和升级,第25章 MySQL中的常用工具,第26章 MySQL日志,第27章 备份与恢复,第28章 MySQL权限与安全,第29章 MySQL监控,第30章 MySQL常见问题和应用技巧,第五部分 架构篇,第31章 MySQL复制,第32章 MySQL Cluster,第33章 高可用架构,版权
文本摘要:
深入浅出MySQL数据库开发、优化与管理维护(第2版)唐汉明 翟振兴 关宝军 王洪权 黄潇 著人民邮电出版社北京MySQL是由David Axmark、Allan Larsson和Michael Widenius 3个瑞典人于 20世纪 90年代开发的一个关系型数据库。最初,他们的目的是用自己的 ISAM(Indexed Sequential Access Method,索引顺序存取方法)和mSQL(Mini SQL,一种轻量级SQL数据库引擎技术)来连接访问表格,但后来发现mSQL的速度和灵活性不能满意需求,于是他们开发了几乎与mSQL API接口相同的数据库引擎,并用创始人之一Michael Widenius女儿My的名字命名,这就是MySQL的来由。说到MySQL就不得不提到开源软件。在MySQL设计之初,就考虑了以后引入第三方代码的方便性,并于 2000年开始采用GPL(GNU General Public License)许可协议,使自己成了开源软件的一分子。开源战略对MySQL的发展和广泛应用,可以说起到了至关重要的作用。从MySQL的历史就可以看出,它最早起源于开源软件mSQL,并从中借鉴了许多东西。不仅开发MySQL用到了许多开源工具,而且MySQL的许多重要组件都直接来自其他第三方的贡献,如BDB存储引擎来自Berkeley DB,其具有里程碑意义的 Innodb数据库存储引擎也是来自芬兰 Innobase OY公司的贡献。进入21世纪,MySQL的发展步入了快车道。MySQL自2001年开始引入InnoDB存储引擎,并于2002年正式宣布MySQL全面支持事务,满意事务ACID属性(Atomicity,原子性;Consistent,一致性;Isolation,隔离性;Durable,持久性),并支持外键约束,使MySQL具备了支持关键应用的最基本特性。2003年,MySQL 4.0发布,开始支持集合操作UNION。2004年,MySQL 4.1发布,增加了对子查询的支持。2005年,MySQL 5.0发布,增加了对视图(View)、数据库存储过程(Stored Procedure)、触发器(Trigger)、服务器端游标(Cursor),以及分布式事务协议XA等高级特性的支持。再加上从3.23.15就开始支持的复制特性,至此,MySQL从功能上已经具备了支持企业级应用的主要特性。在实际应用方面,LAMP(Linux + Apache + MySQL + Perl/PHP/Python)也逐渐成了 IT业广泛使用的Web应用架构。大家知道ANSI/ISO SQL是公认的关系数据库标准。从SQL标准的符合性来说,MySQL不仅无法跟成熟的商业数据库相比,在开源数据库中也远不是最好的,比如 PostgreSQL 就是业界公认的ANSI/ISO SQL标准符合性最好的开源数据库,MySQL直到 5.0版本才支持的一些特性,PostgreSQL早都实现了。既然如此,为什么MySQL却在开源数据库中独占鳌头呢?根本的原因就是性能!有专门机构的调查研究显示,许多数据库提供的功能特性,只有40%被用户常常使用,而一些复杂的高级功能特性不仅会增加系统的复杂性,而且往往还会引起性能问题。PostgreSQL是加州大学伯克利分校以教学为目的开发的数据库系统,以追求功能实现的“完美”为首要目标,虽然在标准的遵从性上比MySQL领先,但性能一直是其短板,很难支持较大的应用。而MySQL 的开发者,在性能与标准的取舍上,一直坚持性能优先的原则,从不为追求标准的符合性而牺牲性能。SQL标准符合性差是MySQL的弱点,但通过上述策略保证了MySQL在性能方面的优势。这就是MySQL在互联网行业非常流行的另一个重要原因,因为Web应用往往需要支持大量的数据和并发哀求,性能常常是首要因素。随着MySQL功能不断完善,性能不断提高,可靠性不断增强,从2005年开始,我们陆续将一些重要数据库迁移到MySQL。虽然相对于Oracle来说,MySQL比较简朴,管理维护相对容易(这也是MySQL的另外一个优势),但在迁移及其后的管理维护过程中,我们也常常遇到一些问题,例如,MySQL 提供了许多存储引擎,这些存储引擎各有特点,在实际应用中应该怎样来选择?MySQL 出现了性能问题,应该如何来诊断和优化?在数据安全方面,毕竟需要注意些什么?MySQL的锁机制有什么特点,如何减少锁冲突,提高并发度?遇到诸如此类的问题,自然会想到查阅 MySQL 文档、上网搜索、到论坛找类似问题的答案或寻求帮助等。通过上述途径当然可以解决许多问题,但却需要花费大量的精力和时间,效率很低。因为,我们发现MySQL的文档很“精练”,也很零碎,远没有Oracle的文档那么详细系统;网上一搜,结果可能数以万计,面对浩如烟海的网页,要找出真正有用的信息决非易事(搜索引擎还有许多改进的余地);至于论坛上的答案,又往往是五花八门,让人无所适从。我们作为专职 DBA 尚且如此,其他开发、维护人员可能就感到更困难了。而且,不同的 DBA 或开发人员遇到同一个问题,可能还要再次去寻求解决方案,造成不必要的重复劳动。为改变这种状况,我们决定将 DBA 平时使用 MySQL 积累的经验,解决问题的方法和思路,以及我们对MySQL的认识等整理出来,编写了一本《MySQL实用手册》,供DBA组及公司其他同事参考。在编写过程中,我们根据自己的经验列出了MySQL开发、管理过程中可能遇到的一些问题,收集了以前解决MySQL问题的方法,形成了实用手册的基本内容框架。在此基础上,我们又研究了MySQL官方手册,筛选比较重要、实用但MySQL手册讲得不够详细或内容过于零散的部分作为补充。为力求准确,我们还专门做了许多测试,比如有关MySQL锁的测试、事务完整性的测试等。基于实用为主的原则,《MySQL实用手册》的第一稿篇幅不多,包括“开发篇”、“优化篇”和“管理篇”3个部分。“开发篇”主要介绍了与MySQL数据库开发设计相关的一些问题,包括存储引擎选择原则,如何选择合适的数据类型,不同字符集的特点及设置,索引的设计原则,以及SQL注入的类型,程序设计实现中如何防范SQL注入类安全漏洞等。“优化篇”首先介绍了MySQL数据库优化调整的一般步骤和方法,随后分别就索引问题、SQL优化、数据库对象调整、锁问题、MySQL关键性能参数设置、I/O优化、应用程序优化等作了讨论,并介绍了两个简朴实用的优化命令,特别对锁问题做了比较系统、详细的介绍和讨论。“管理篇”除备份恢复等基本内容外,还介绍了MySQL安全配置管理应注意的各个方面,以及管理维护中一些常用的命令和小技巧。《MySQL实用手册》第一稿出来后,我们发给了一些公司的同事,大家反馈内容很实用,对MySQL的开发管理很有帮助。得到这个评价,我们心里已经很是欣慰了,当有同事建议我们将其出版时,更是超出了我们的预期,开始只是随口允许了一下,并没敢当真。后来,热心的同事替我们与出版社取得了联系,出版社看过内容介绍和提纲后,觉得内容不错,做一些补充和修改就可以出版。得到这个回复,我们非常高兴。但高兴之余,心里也很忐忑。在我们的概念中,出书都是作家、专家,及各类名人的“专利”,我们这些无名之辈,有这个资格吗?此时,上级领导的支持、同事的不断鼓励,给了我们信心。虽然我们不是什么专家,写不出多么高深的东西,但作为工作在数据库开发管理第一线的工程师,遇到的实际问题可能更多、更详细,写出的东西也许更实用。MySQL 是一个开源数据库,开源的精神就是分享和交流,基于这一点,我们的顾虑就少了,也更加坦然了。在《MySQL实用手册》第一稿的基础上,根据同事和出版社的建议,对内容做了一些补充和修订,增加了“基础篇”,以利于初次接触MySQL的读者阅读;在“管理篇”中补充了有关复制、日志管理和MySQL集群的介绍,使本书的内容更加丰富,更加完善。在内容编排上,我们基本遵循由易到难、循序渐进的原则,最后就形成了《深入浅出MySQL:数据库开发、优化与管理维护》一书。本书第1版出版后,得到了不少同学的支持和肯定,这给了我们极大的鼓舞。随着MySQL新版本的不断推出,书中的一些内容已经过时,于是出版社的编辑建议我们对此书进行修订和升级。在编辑的支持和鼓励下,根据MySQL 5.5的新特性和近两年的应用实践,我们对本书内容进行了大量的修订,不但调整了本书的结构,还重新撰写了部分内容,并增加了分区、高可用架构、数据库监控等新内容,使本书的品质得到了进一步的提升。对这本书的编写和改编过程,也是我们对MySQL再学习、再认识的过程。MySQL有许多优势,当然也还存在许多不足,但现在的 MySQL 应该说是值得信赖的,伴随着开源软件的发展,相信MySQL的未来也是值得期待的。这也正是我们把MySQL介绍给大家的原因,希望能对您有所帮助。由于我们的水平所限,书中谬误和不足可能难免,敬请广大同行批评指正!网易公司技术部DBA组2013年11月于北京互联网的快速发展离不开各种技术和软件的普及与应用。作为开源软件的代表,MySQL数据库随着其功能的日益完善和可靠性的不断提高,已经成为互联网平台上应用广泛的数据库软件。网易公司成立十几年来,推出了众多网民所喜爱的产品与服务,其中MySQL数据库在后台也扮演了重要的角色。在应用MySQL的过程中,我们的工程师曾遇到了形形色色的问题,从开发技巧到管理维护,从性能问题到安全问题。本着交流和分享的精神,他们将多年实践中积累的经验和心得整理出来,编写了《MySQL实用手册》,在网易公司内部进行了交流,受到很大欢迎。在此基础上,他们联系出版机构将实用手册完善后出版,希望和海内更多的MySQL用户分享与交流。这本书从应用开发、管理优化、系统维护3个角度,由浅入深地介绍了MySQL数据库各方面的知识,还从应用的角度总结了网易工程师遇到的各种问题以及解决方法,对实际工作者具有一定的实践指导意义。值此新书即将出版之际,谨向此书的作者团队表示祝贺,也真诚地期待读者朋友们提出宝贵意见。我们希望“网聚人的力量”,共同为互联网的技术和应用的发展不懈努力。网易公司总裁前言写作背景最近几年,随着 IT 技术的发展,开源数据库逐渐流行起来。和传统的商业数据库相比,开源数据库具有完全免费、源码公开、随意下载等特点,可以用于各种商业目的。这使得开源数据库被广泛应用在各个行业中,大大降低了企业的开发运营成本。因此,开源数据库对传统商业数据库的市场造成了极大的冲击,使得传统商业数据库提供商不得不提供相应数据库的免费版本(并非开源),但是这些免费版本一般都具有很多的功能限制,和开源数据库相比,还是有不小的差距。MySQL 正是这些开源数据库中的杰出代表。在此背景下,为了帮助广大MySQL兴趣者快速掌握和使用MySQL,我们编写了本书的第一版,全书章节按照一个 DBA 需要具备的从业素质进行布局,内容循序渐进,既可以引导初学者入门,又可以帮助具备一定基础的数据库从业人员进阶。第 1版出版后我们收到了很多读者的反馈,既有肯定也有很多中肯的建议,这里一并进行感谢。随着近几年MySQL进一步的发展,《深入浅出MySQL:数据库开发、优化与管理维护》第1版中的很多内容都已经过时,于是出版社的编辑建议我们对此书进行升级改版,加入一些新内容,淘汰一些旧内容,以便分享我们最新的实战总结和经验教训。经过大家讨论,决定进行改版。新版的内容主要基于MySQL 5.5,在保留第 1版部分内容的基础上,增加了分区、监控、高可用架构等新内容,并对原有章节结构进行了较大的调整,全书内容也重新划分,增加了架构篇。由于时间关系,部分内容和例子还是基于MySQL 5.0的,但与MySQL 5.5差别很小,这部分内容没有做改动,希望大家谅解。希望新的结构能让大家有更多的收获。本书特点本书作者均为海内著名门户网站网易(http://www.163.com)技术部的DBA组成员,具有丰富的数据库开发、优化和管理维护经验。本书是作者多年工作实践的积累和总结,针对 DBA在工作中的必备知识与技能,作者精心安排了本书的篇章结构。本书从基础入手,面向实际应用,力图让读者从多个角度对MySQL有深入的认识和理解。本书最大的特点就是实战性强,通过循序渐进的内容组织,配以深入浅出的文字论述和丰富的实例对MySQL进行了系统、详细的介绍。从内容上来看,本书系统全面,涵盖了MySQL开发、优化和管理维护的方方面面;从写作风格上来看,本书不过多讨论抽象的理论,而是通过丰富的实例来帮助读者理解应用MySQL数据库时遇到的各种问题及其解决办法,读者不但能够很容易地部署自己的测试环境,还能掌握应用MySQL数据库的各种技巧。本书结构本书分为基础篇、开发篇、优化篇、管理维护篇、架构篇5个部分,共33章。全书的详细章节安排如下。第一部分 基础篇(第1章~第6章):主要面向MySQL的初学者,包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。通过这部分内容的学习,读者可以认识MySQL基本的安装和相关使用方法。第二部分 开发篇(第7章~第17章):主要面向MySQL的设计和开发人员,包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、触发器、事务控制和锁定语句、SQL中的安全问题、SQL Mode及相关问题、分区等内容。通过这部分内容的学习,读者可以了解MySQL设计和开发中需要关注的问题。第三部分 优化篇(第18章~第23章):主要面向开发人员和数据库管理员,包括SQL优化、优化数据库对象、锁问题、优化MySQL Server、磁盘 I/O问题、应用优化等内容。通过这部分内容的学习,读者可以了解MySQL中需要优化的对象和常用的优化方法。第四部分 管理维护篇(第 24 章~第 30 章):主要面向数据库管理员,包括MySQL高级安装和升级、MySQL中的常用工具、MySQL日志、备份与恢复、MySQL权限与安全、MySQL监控、MySQL常见问题和应用技巧等内容。通过这部分内容的学习,读者可以了解在MySQL中常用的管理维护方法。第五部分 架构篇(第 31 章~第 33 章):主要面向高级数据库管理人员和数据库架构设计师,包括MySQL复制、MySQL Cluster、高可用架构等内容。通过这部分内容的学习,读者可以了解MySQL的一些高级应用。本书的组织架构由唐汉明和翟振兴设计。参与本书编写的主要人员有唐汉明、翟振兴、关宝军、王洪权和黄潇。全书由翟振兴进行统一审稿和修改。本书适用读者本书适用于MySQL的初学者,也适用于具备一定数据库基础并打算继承深入学习MySQL技术的数据库从业人员,更适合于专业的MySQL数据库管理员(DBA)。本书可以作为大中专院校相关专业师生的参考用书,也可以作为相关培训机构的培训教程。第一部分 基础篇第1章 MySQL的安装与配置近几年,开源数据库逐渐流行起来。由于具有免费使用、配置简朴、稳定性好、性能优良等长处,开源数据库在中低端应用中占据了很大的市场份额,而MySQL正是开源数据库中的杰出代表。MySQL 数据库隶属于 MySQL AB 公司,总部位于瑞典。公司名中的“AB”是瑞典语“aktiebolag”或“股份公司”的首字母缩写。MySQL支持几乎所有的操作系统,并且支持很大的表(MyISAM存储引擎支持的最大表尺寸为65536TB),这些特性使得MySQL的发展非常迅猛,目前已经广泛应用在各个行业中。1.1 MySQL的下载用户通常可以到官方网站www.mysql.com下载最新版本的MySQL数据库。按照用户群分类,MySQL数据库目前分为社区版(Community Server)和企业版(Enterprise),它们最重要的区别在于:社区版是自由下载而且完全免费的,但是官方不提供任何技术支持,适用于大多数普通用户;企业版是收费的,不能在线下载,相应地,它提供了更多的功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。MySQL的版本更新很快,目前可以下载的版本包括4.1、5.0、5.1和6.0。其中4.1和5.0是发行版,5.1和6.0都还是测试版。这些不同版本之间的主要区别如表1-1所示。表1-1 MySQL不同版本的重要改进针对每个版本,还分为3个类型。Standard:推荐大多数用户下载。Max:除Standard的所有内容外,还有一些附加的新特性,这些特性还没有通过正式的测试发布,主要用于提升用户的认识和体验。Debug:和Standard类似,但是包括了一些调试信息,会影响系统性能,所以不推荐用户下载。对于不同的操作系统平台,MySQL提供了相应的版本。本章将以Windows平台下的noinstall包和图形化安装包以及Linux平台下的RPM包为例,说明MySQL的下载、安装、配置、启动和关闭过程。本章的测试环境分别是32位的Windows XP和x86平台上的RedHat Linux AS3。1.1.1 在Windows平台下下载MySQL打开浏览器,在地址栏中输入 http://dev.mysql.com/downloads/mysql/5.0.html#linux,打开MySQL下载页面,单击“Windows downloads”下“Without installer(unzip in C:\)”后面的“Download”或者“Pick a mirror”链接来选择一个镜像站点进行下载,如图 1-1所示。图1-1 下载Without installer(unzip in C:\)1.1.2 在Linux平台下下载MySQL在Linux平台下,要下载MySQL可以采用以下两种方法。1.通过网页直接下载(1)打开浏览器,在地址栏中输入http://dev.mysql.com/downloads/mysql/5.0.html#linux,打开MySQL下载页面,单击“Red Hat Enterprise Linux 3 RPM (x86) downloads”下的“Server”和“Client”后面的“Download”或者“Pick a mirror”链接来选择一个镜像站点进行下载,如图1-2所示。(2)将下载后的文件用FTP等工具传送到Linux服务器上。2.通过命令行方式下载(1)首先得到下载地址的URL(用鼠标右键单击“Download”或者镜像地址的链接,“属性”对话框中显示的“地址”信息即是URL),如图1-3所示。图1-2 下载Server和Client在图1-3中,本例显示的URL是:http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-noinstall-5.0.45-win32.zip/from/ht tp://mysql.cdpa.nsysu.edu.tw/(2)然后使用wget命令在Linux服务器上直接下载Server和Client软件包。图1-3 下载地址的URL在本例中,下载Server软件包的详细命令如下:[zzx@localhost ~]$ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL- server-community-5.0.45-0.rhel3.i386.rpm/from/http://mysyl.cdpa.nsysu.edu.tw/w/--10:42:38-- http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server- community-5. 0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/=> 'index.html'Resolving dev.mysql.com... 213.136.52.29Connecting to dev.mysql.com|213.136.52.29|:80... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-server- community-5. 0.45-0.rhel3.i386.rpm [following]--10:42:39-- http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-server-community -5.0.45-0.rhel3.i386.rpm=> 'MySQL-server-community-5.0.45-0.rhel3.i386.rpm.1'Resolving mysql.cdpa.nsysu.edu.tw... 140.110.123.9Connecting to mysql.cdpa.nsysu.edu.tw|140.110.123.9|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 18,092,605 (17M) [text/plain]100%[==================================================================>] 18,092,605 2.00M/s ETA 00:0010:42:57 (1.11 MB/s) - 'MySQL-server-community-5.0.45-0.rhel3.i386.rpm.1' saved [18092605/18092605]wget http://dev.mysql.com/get/Downloads/MySQL-5.0/ MySQL-client-community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/在本例中,下载Client软件包的详细命令如下:[zzx@localhost ~]$ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL- client-community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/--10:47:55-- http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/=> 'index.html'Resolving dev.mysql.com... 213.136.52.29Connecting to dev.mysql.com|213.136.52.29|:80... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm [following]--10:47:56-- http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm=> 'MySQL-client-community-5.0.45-0.rhel3.i386.rpm.1'Resolving mysql.cdpa.nsysu.edu.tw... 140.110.123.9Connecting to mysql.cdpa.nsysu.edu.tw|140.110.123.9|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 6,257,771 (6.0M) [text/plain]100%[==================================================================>] 6,257,771 1.14M/s ETA 00:0010:48:05 (838.78 KB/s) - 'MySQL-client-community-5.0.45-0.rhel3.i386.rpm.1' saved [6257771/6257771]1.2 MySQL的安装MySQL的安装分很多种情况。下面将以Windows平台和Linux平台为例,介绍 MySQL在不同操作系统平台上的安装方法。1.2.1 在Windows平台下安装MySQLWindows平台下的安装包主要有两种,一种是noinstall包,顾名思义,不需要安装就可以直接使用;另一种是.zip 安装包,可以通过图形化界面进行安装。下面分别就两种安装方式进行介绍。1.noinstall安装在Windows平台下安装MySQL,其安装步骤非常简朴,只要将下载的文件mysql-noinstall-5.0.45-win32.zip 放到自定义安装目录下,再用 WinRAR 等压缩工具解压即可。本例中解压到C:\目录下,如图1-4所示。

深入浅出MySQL:数据库开发、优化与管理维护(第2版).pdf下载链接:点此立刻下载
《深入浅出MySQL:数据库开发、优化与管理维护(第 2版)》从数据库的基础、开发、优化、管理维护和架构5个方面对MySQL进行了详细的介绍,每一部分都独立成篇。基础篇主要适合于MySQL的初学者阅读,包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。开发篇主要适合于MySQL的设计和开发人员阅读,内容包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、
目录菜单:
封面,扉页,序,前言,第一部分 基础篇,第1章 MySQL的安装与配置,第2章 SQL基础,第3章 MySQL支持的数据类型,第4章 MySQL中的运算符,第5章 常用函数,第6章 图形化工具的使用,第二部分 开发篇,第7章 表类型(存储引擎)的选择,第8章 选择合适的数据类型,第9章 字符集,第10章 索引的设计和使用,第11章 视图,第12章 存储过程和函数,第13章 触发器,第14章 事务控制和锁定语句,第15章 SQL中的安全问题,第16章 SQL Mode及相关问题,第17章 MySQL分区,第三部分 优化篇,第18章 SQL优化,第19章 优化数据库对象,第20章 锁问题,第21章 优化MySQL Server,第22章 磁盘I/O问题,第23章 应用优化,第四部分 管理维护篇,第24章 MySQL高级安装和升级,第25章 MySQL中的常用工具,第26章 MySQL日志,第27章 备份与恢复,第28章 MySQL权限与安全,第29章 MySQL监控,第30章 MySQL常见问题和应用技巧,第五部分 架构篇,第31章 MySQL复制,第32章 MySQL Cluster,第33章 高可用架构,版权
文本摘要:
深入浅出MySQL数据库开发、优化与管理维护(第2版)唐汉明 翟振兴 关宝军 王洪权 黄潇 著人民邮电出版社北京MySQL是由David Axmark、Allan Larsson和Michael Widenius 3个瑞典人于 20世纪 90年代开发的一个关系型数据库。最初,他们的目的是用自己的 ISAM(Indexed Sequential Access Method,索引顺序存取方法)和mSQL(Mini SQL,一种轻量级SQL数据库引擎技术)来连接访问表格,但后来发现mSQL的速度和灵活性不能满意需求,于是他们开发了几乎与mSQL API接口相同的数据库引擎,并用创始人之一Michael Widenius女儿My的名字命名,这就是MySQL的来由。说到MySQL就不得不提到开源软件。在MySQL设计之初,就考虑了以后引入第三方代码的方便性,并于 2000年开始采用GPL(GNU General Public License)许可协议,使自己成了开源软件的一分子。开源战略对MySQL的发展和广泛应用,可以说起到了至关重要的作用。从MySQL的历史就可以看出,它最早起源于开源软件mSQL,并从中借鉴了许多东西。不仅开发MySQL用到了许多开源工具,而且MySQL的许多重要组件都直接来自其他第三方的贡献,如BDB存储引擎来自Berkeley DB,其具有里程碑意义的 Innodb数据库存储引擎也是来自芬兰 Innobase OY公司的贡献。进入21世纪,MySQL的发展步入了快车道。MySQL自2001年开始引入InnoDB存储引擎,并于2002年正式宣布MySQL全面支持事务,满意事务ACID属性(Atomicity,原子性;Consistent,一致性;Isolation,隔离性;Durable,持久性),并支持外键约束,使MySQL具备了支持关键应用的最基本特性。2003年,MySQL 4.0发布,开始支持集合操作UNION。2004年,MySQL 4.1发布,增加了对子查询的支持。2005年,MySQL 5.0发布,增加了对视图(View)、数据库存储过程(Stored Procedure)、触发器(Trigger)、服务器端游标(Cursor),以及分布式事务协议XA等高级特性的支持。再加上从3.23.15就开始支持的复制特性,至此,MySQL从功能上已经具备了支持企业级应用的主要特性。在实际应用方面,LAMP(Linux + Apache + MySQL + Perl/PHP/Python)也逐渐成了 IT业广泛使用的Web应用架构。大家知道ANSI/ISO SQL是公认的关系数据库标准。从SQL标准的符合性来说,MySQL不仅无法跟成熟的商业数据库相比,在开源数据库中也远不是最好的,比如 PostgreSQL 就是业界公认的ANSI/ISO SQL标准符合性最好的开源数据库,MySQL直到 5.0版本才支持的一些特性,PostgreSQL早都实现了。既然如此,为什么MySQL却在开源数据库中独占鳌头呢?根本的原因就是性能!有专门机构的调查研究显示,许多数据库提供的功能特性,只有40%被用户常常使用,而一些复杂的高级功能特性不仅会增加系统的复杂性,而且往往还会引起性能问题。PostgreSQL是加州大学伯克利分校以教学为目的开发的数据库系统,以追求功能实现的“完美”为首要目标,虽然在标准的遵从性上比MySQL领先,但性能一直是其短板,很难支持较大的应用。而MySQL 的开发者,在性能与标准的取舍上,一直坚持性能优先的原则,从不为追求标准的符合性而牺牲性能。SQL标准符合性差是MySQL的弱点,但通过上述策略保证了MySQL在性能方面的优势。这就是MySQL在互联网行业非常流行的另一个重要原因,因为Web应用往往需要支持大量的数据和并发哀求,性能常常是首要因素。随着MySQL功能不断完善,性能不断提高,可靠性不断增强,从2005年开始,我们陆续将一些重要数据库迁移到MySQL。虽然相对于Oracle来说,MySQL比较简朴,管理维护相对容易(这也是MySQL的另外一个优势),但在迁移及其后的管理维护过程中,我们也常常遇到一些问题,例如,MySQL 提供了许多存储引擎,这些存储引擎各有特点,在实际应用中应该怎样来选择?MySQL 出现了性能问题,应该如何来诊断和优化?在数据安全方面,毕竟需要注意些什么?MySQL的锁机制有什么特点,如何减少锁冲突,提高并发度?遇到诸如此类的问题,自然会想到查阅 MySQL 文档、上网搜索、到论坛找类似问题的答案或寻求帮助等。通过上述途径当然可以解决许多问题,但却需要花费大量的精力和时间,效率很低。因为,我们发现MySQL的文档很“精练”,也很零碎,远没有Oracle的文档那么详细系统;网上一搜,结果可能数以万计,面对浩如烟海的网页,要找出真正有用的信息决非易事(搜索引擎还有许多改进的余地);至于论坛上的答案,又往往是五花八门,让人无所适从。我们作为专职 DBA 尚且如此,其他开发、维护人员可能就感到更困难了。而且,不同的 DBA 或开发人员遇到同一个问题,可能还要再次去寻求解决方案,造成不必要的重复劳动。为改变这种状况,我们决定将 DBA 平时使用 MySQL 积累的经验,解决问题的方法和思路,以及我们对MySQL的认识等整理出来,编写了一本《MySQL实用手册》,供DBA组及公司其他同事参考。在编写过程中,我们根据自己的经验列出了MySQL开发、管理过程中可能遇到的一些问题,收集了以前解决MySQL问题的方法,形成了实用手册的基本内容框架。在此基础上,我们又研究了MySQL官方手册,筛选比较重要、实用但MySQL手册讲得不够详细或内容过于零散的部分作为补充。为力求准确,我们还专门做了许多测试,比如有关MySQL锁的测试、事务完整性的测试等。基于实用为主的原则,《MySQL实用手册》的第一稿篇幅不多,包括“开发篇”、“优化篇”和“管理篇”3个部分。“开发篇”主要介绍了与MySQL数据库开发设计相关的一些问题,包括存储引擎选择原则,如何选择合适的数据类型,不同字符集的特点及设置,索引的设计原则,以及SQL注入的类型,程序设计实现中如何防范SQL注入类安全漏洞等。“优化篇”首先介绍了MySQL数据库优化调整的一般步骤和方法,随后分别就索引问题、SQL优化、数据库对象调整、锁问题、MySQL关键性能参数设置、I/O优化、应用程序优化等作了讨论,并介绍了两个简朴实用的优化命令,特别对锁问题做了比较系统、详细的介绍和讨论。“管理篇”除备份恢复等基本内容外,还介绍了MySQL安全配置管理应注意的各个方面,以及管理维护中一些常用的命令和小技巧。《MySQL实用手册》第一稿出来后,我们发给了一些公司的同事,大家反馈内容很实用,对MySQL的开发管理很有帮助。得到这个评价,我们心里已经很是欣慰了,当有同事建议我们将其出版时,更是超出了我们的预期,开始只是随口允许了一下,并没敢当真。后来,热心的同事替我们与出版社取得了联系,出版社看过内容介绍和提纲后,觉得内容不错,做一些补充和修改就可以出版。得到这个回复,我们非常高兴。但高兴之余,心里也很忐忑。在我们的概念中,出书都是作家、专家,及各类名人的“专利”,我们这些无名之辈,有这个资格吗?此时,上级领导的支持、同事的不断鼓励,给了我们信心。虽然我们不是什么专家,写不出多么高深的东西,但作为工作在数据库开发管理第一线的工程师,遇到的实际问题可能更多、更详细,写出的东西也许更实用。MySQL 是一个开源数据库,开源的精神就是分享和交流,基于这一点,我们的顾虑就少了,也更加坦然了。在《MySQL实用手册》第一稿的基础上,根据同事和出版社的建议,对内容做了一些补充和修订,增加了“基础篇”,以利于初次接触MySQL的读者阅读;在“管理篇”中补充了有关复制、日志管理和MySQL集群的介绍,使本书的内容更加丰富,更加完善。在内容编排上,我们基本遵循由易到难、循序渐进的原则,最后就形成了《深入浅出MySQL:数据库开发、优化与管理维护》一书。本书第1版出版后,得到了不少同学的支持和肯定,这给了我们极大的鼓舞。随着MySQL新版本的不断推出,书中的一些内容已经过时,于是出版社的编辑建议我们对此书进行修订和升级。在编辑的支持和鼓励下,根据MySQL 5.5的新特性和近两年的应用实践,我们对本书内容进行了大量的修订,不但调整了本书的结构,还重新撰写了部分内容,并增加了分区、高可用架构、数据库监控等新内容,使本书的品质得到了进一步的提升。对这本书的编写和改编过程,也是我们对MySQL再学习、再认识的过程。MySQL有许多优势,当然也还存在许多不足,但现在的 MySQL 应该说是值得信赖的,伴随着开源软件的发展,相信MySQL的未来也是值得期待的。这也正是我们把MySQL介绍给大家的原因,希望能对您有所帮助。由于我们的水平所限,书中谬误和不足可能难免,敬请广大同行批评指正!网易公司技术部DBA组2013年11月于北京互联网的快速发展离不开各种技术和软件的普及与应用。作为开源软件的代表,MySQL数据库随着其功能的日益完善和可靠性的不断提高,已经成为互联网平台上应用广泛的数据库软件。网易公司成立十几年来,推出了众多网民所喜爱的产品与服务,其中MySQL数据库在后台也扮演了重要的角色。在应用MySQL的过程中,我们的工程师曾遇到了形形色色的问题,从开发技巧到管理维护,从性能问题到安全问题。本着交流和分享的精神,他们将多年实践中积累的经验和心得整理出来,编写了《MySQL实用手册》,在网易公司内部进行了交流,受到很大欢迎。在此基础上,他们联系出版机构将实用手册完善后出版,希望和海内更多的MySQL用户分享与交流。这本书从应用开发、管理优化、系统维护3个角度,由浅入深地介绍了MySQL数据库各方面的知识,还从应用的角度总结了网易工程师遇到的各种问题以及解决方法,对实际工作者具有一定的实践指导意义。值此新书即将出版之际,谨向此书的作者团队表示祝贺,也真诚地期待读者朋友们提出宝贵意见。我们希望“网聚人的力量”,共同为互联网的技术和应用的发展不懈努力。网易公司总裁前言写作背景最近几年,随着 IT 技术的发展,开源数据库逐渐流行起来。和传统的商业数据库相比,开源数据库具有完全免费、源码公开、随意下载等特点,可以用于各种商业目的。这使得开源数据库被广泛应用在各个行业中,大大降低了企业的开发运营成本。因此,开源数据库对传统商业数据库的市场造成了极大的冲击,使得传统商业数据库提供商不得不提供相应数据库的免费版本(并非开源),但是这些免费版本一般都具有很多的功能限制,和开源数据库相比,还是有不小的差距。MySQL 正是这些开源数据库中的杰出代表。在此背景下,为了帮助广大MySQL兴趣者快速掌握和使用MySQL,我们编写了本书的第一版,全书章节按照一个 DBA 需要具备的从业素质进行布局,内容循序渐进,既可以引导初学者入门,又可以帮助具备一定基础的数据库从业人员进阶。第 1版出版后我们收到了很多读者的反馈,既有肯定也有很多中肯的建议,这里一并进行感谢。随着近几年MySQL进一步的发展,《深入浅出MySQL:数据库开发、优化与管理维护》第1版中的很多内容都已经过时,于是出版社的编辑建议我们对此书进行升级改版,加入一些新内容,淘汰一些旧内容,以便分享我们最新的实战总结和经验教训。经过大家讨论,决定进行改版。新版的内容主要基于MySQL 5.5,在保留第 1版部分内容的基础上,增加了分区、监控、高可用架构等新内容,并对原有章节结构进行了较大的调整,全书内容也重新划分,增加了架构篇。由于时间关系,部分内容和例子还是基于MySQL 5.0的,但与MySQL 5.5差别很小,这部分内容没有做改动,希望大家谅解。希望新的结构能让大家有更多的收获。本书特点本书作者均为海内著名门户网站网易(http://www.163.com)技术部的DBA组成员,具有丰富的数据库开发、优化和管理维护经验。本书是作者多年工作实践的积累和总结,针对 DBA在工作中的必备知识与技能,作者精心安排了本书的篇章结构。本书从基础入手,面向实际应用,力图让读者从多个角度对MySQL有深入的认识和理解。本书最大的特点就是实战性强,通过循序渐进的内容组织,配以深入浅出的文字论述和丰富的实例对MySQL进行了系统、详细的介绍。从内容上来看,本书系统全面,涵盖了MySQL开发、优化和管理维护的方方面面;从写作风格上来看,本书不过多讨论抽象的理论,而是通过丰富的实例来帮助读者理解应用MySQL数据库时遇到的各种问题及其解决办法,读者不但能够很容易地部署自己的测试环境,还能掌握应用MySQL数据库的各种技巧。本书结构本书分为基础篇、开发篇、优化篇、管理维护篇、架构篇5个部分,共33章。全书的详细章节安排如下。第一部分 基础篇(第1章~第6章):主要面向MySQL的初学者,包括MySQL的安装与配置、SQL基础、MySQL支持的数据类型、MySQL中的运算符、常用函数、图形化工具的使用等内容。通过这部分内容的学习,读者可以认识MySQL基本的安装和相关使用方法。第二部分 开发篇(第7章~第17章):主要面向MySQL的设计和开发人员,包括表类型(存储引擎)的选择、选择合适的数据类型、字符集、索引的设计和使用、视图、存储过程和函数、触发器、事务控制和锁定语句、SQL中的安全问题、SQL Mode及相关问题、分区等内容。通过这部分内容的学习,读者可以了解MySQL设计和开发中需要关注的问题。第三部分 优化篇(第18章~第23章):主要面向开发人员和数据库管理员,包括SQL优化、优化数据库对象、锁问题、优化MySQL Server、磁盘 I/O问题、应用优化等内容。通过这部分内容的学习,读者可以了解MySQL中需要优化的对象和常用的优化方法。第四部分 管理维护篇(第 24 章~第 30 章):主要面向数据库管理员,包括MySQL高级安装和升级、MySQL中的常用工具、MySQL日志、备份与恢复、MySQL权限与安全、MySQL监控、MySQL常见问题和应用技巧等内容。通过这部分内容的学习,读者可以了解在MySQL中常用的管理维护方法。第五部分 架构篇(第 31 章~第 33 章):主要面向高级数据库管理人员和数据库架构设计师,包括MySQL复制、MySQL Cluster、高可用架构等内容。通过这部分内容的学习,读者可以了解MySQL的一些高级应用。本书的组织架构由唐汉明和翟振兴设计。参与本书编写的主要人员有唐汉明、翟振兴、关宝军、王洪权和黄潇。全书由翟振兴进行统一审稿和修改。本书适用读者本书适用于MySQL的初学者,也适用于具备一定数据库基础并打算继承深入学习MySQL技术的数据库从业人员,更适合于专业的MySQL数据库管理员(DBA)。本书可以作为大中专院校相关专业师生的参考用书,也可以作为相关培训机构的培训教程。第一部分 基础篇第1章 MySQL的安装与配置近几年,开源数据库逐渐流行起来。由于具有免费使用、配置简朴、稳定性好、性能优良等长处,开源数据库在中低端应用中占据了很大的市场份额,而MySQL正是开源数据库中的杰出代表。MySQL 数据库隶属于 MySQL AB 公司,总部位于瑞典。公司名中的“AB”是瑞典语“aktiebolag”或“股份公司”的首字母缩写。MySQL支持几乎所有的操作系统,并且支持很大的表(MyISAM存储引擎支持的最大表尺寸为65536TB),这些特性使得MySQL的发展非常迅猛,目前已经广泛应用在各个行业中。1.1 MySQL的下载用户通常可以到官方网站www.mysql.com下载最新版本的MySQL数据库。按照用户群分类,MySQL数据库目前分为社区版(Community Server)和企业版(Enterprise),它们最重要的区别在于:社区版是自由下载而且完全免费的,但是官方不提供任何技术支持,适用于大多数普通用户;企业版是收费的,不能在线下载,相应地,它提供了更多的功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户。MySQL的版本更新很快,目前可以下载的版本包括4.1、5.0、5.1和6.0。其中4.1和5.0是发行版,5.1和6.0都还是测试版。这些不同版本之间的主要区别如表1-1所示。表1-1 MySQL不同版本的重要改进针对每个版本,还分为3个类型。Standard:推荐大多数用户下载。Max:除Standard的所有内容外,还有一些附加的新特性,这些特性还没有通过正式的测试发布,主要用于提升用户的认识和体验。Debug:和Standard类似,但是包括了一些调试信息,会影响系统性能,所以不推荐用户下载。对于不同的操作系统平台,MySQL提供了相应的版本。本章将以Windows平台下的noinstall包和图形化安装包以及Linux平台下的RPM包为例,说明MySQL的下载、安装、配置、启动和关闭过程。本章的测试环境分别是32位的Windows XP和x86平台上的RedHat Linux AS3。1.1.1 在Windows平台下下载MySQL打开浏览器,在地址栏中输入 http://dev.mysql.com/downloads/mysql/5.0.html#linux,打开MySQL下载页面,单击“Windows downloads”下“Without installer(unzip in C:\)”后面的“Download”或者“Pick a mirror”链接来选择一个镜像站点进行下载,如图 1-1所示。图1-1 下载Without installer(unzip in C:\)1.1.2 在Linux平台下下载MySQL在Linux平台下,要下载MySQL可以采用以下两种方法。1.通过网页直接下载(1)打开浏览器,在地址栏中输入http://dev.mysql.com/downloads/mysql/5.0.html#linux,打开MySQL下载页面,单击“Red Hat Enterprise Linux 3 RPM (x86) downloads”下的“Server”和“Client”后面的“Download”或者“Pick a mirror”链接来选择一个镜像站点进行下载,如图1-2所示。(2)将下载后的文件用FTP等工具传送到Linux服务器上。2.通过命令行方式下载(1)首先得到下载地址的URL(用鼠标右键单击“Download”或者镜像地址的链接,“属性”对话框中显示的“地址”信息即是URL),如图1-3所示。图1-2 下载Server和Client在图1-3中,本例显示的URL是:http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-noinstall-5.0.45-win32.zip/from/ht tp://mysql.cdpa.nsysu.edu.tw/(2)然后使用wget命令在Linux服务器上直接下载Server和Client软件包。图1-3 下载地址的URL在本例中,下载Server软件包的详细命令如下:[zzx@localhost ~]$ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL- server-community-5.0.45-0.rhel3.i386.rpm/from/http://mysyl.cdpa.nsysu.edu.tw/w/--10:42:38-- http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-server- community-5. 0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/=> 'index.html'Resolving dev.mysql.com... 213.136.52.29Connecting to dev.mysql.com|213.136.52.29|:80... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-server- community-5. 0.45-0.rhel3.i386.rpm [following]--10:42:39-- http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-server-community -5.0.45-0.rhel3.i386.rpm=> 'MySQL-server-community-5.0.45-0.rhel3.i386.rpm.1'Resolving mysql.cdpa.nsysu.edu.tw... 140.110.123.9Connecting to mysql.cdpa.nsysu.edu.tw|140.110.123.9|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 18,092,605 (17M) [text/plain]100%[==================================================================>] 18,092,605 2.00M/s ETA 00:0010:42:57 (1.11 MB/s) - 'MySQL-server-community-5.0.45-0.rhel3.i386.rpm.1' saved [18092605/18092605]wget http://dev.mysql.com/get/Downloads/MySQL-5.0/ MySQL-client-community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/在本例中,下载Client软件包的详细命令如下:[zzx@localhost ~]$ wget http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL- client-community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/--10:47:55-- http://dev.mysql.com/get/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm/from/http://mysql.cdpa.nsysu.edu.tw/=> 'index.html'Resolving dev.mysql.com... 213.136.52.29Connecting to dev.mysql.com|213.136.52.29|:80... connected.HTTP request sent, awaiting response... 302 FoundLocation: http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm [following]--10:47:56-- http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.0/MySQL-client- community-5.0.45-0.rhel3.i386.rpm=> 'MySQL-client-community-5.0.45-0.rhel3.i386.rpm.1'Resolving mysql.cdpa.nsysu.edu.tw... 140.110.123.9Connecting to mysql.cdpa.nsysu.edu.tw|140.110.123.9|:80... connected.HTTP request sent, awaiting response... 200 OKLength: 6,257,771 (6.0M) [text/plain]100%[==================================================================>] 6,257,771 1.14M/s ETA 00:0010:48:05 (838.78 KB/s) - 'MySQL-client-community-5.0.45-0.rhel3.i386.rpm.1' saved [6257771/6257771]1.2 MySQL的安装MySQL的安装分很多种情况。下面将以Windows平台和Linux平台为例,介绍 MySQL在不同操作系统平台上的安装方法。1.2.1 在Windows平台下安装MySQLWindows平台下的安装包主要有两种,一种是noinstall包,顾名思义,不需要安装就可以直接使用;另一种是.zip 安装包,可以通过图形化界面进行安装。下面分别就两种安装方式进行介绍。1.noinstall安装在Windows平台下安装MySQL,其安装步骤非常简朴,只要将下载的文件mysql-noinstall-5.0.45-win32.zip 放到自定义安装目录下,再用 WinRAR 等压缩工具解压即可。本例中解压到C:\目录下,如图1-4所示。

深入浅出MySQL:数据库开发、优化与管理维护(第2版).pdf下载链接:点此立刻下载
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论