跟老男孩学Linux运维:MySQL入门与提高实践(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-23 06:32:44

点击下载

作者:老男孩

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

跟老男孩学Linux运维:MySQL入门与提高实践

跟老男孩学Linux运维:MySQL入门与提高实践试读:

前言

为什么要写这本书“跟老男孩学Linux运维”系列书籍出版以来,得到了广大网友的一致好评和赞扬,但是也有很多读者和网友从各种渠道对老男孩提出了新的期待,其中之一就是系列书籍中缺少企业中最为关键的MySQL实战方向的书籍。

毋庸置疑,所有互联网网站最大的瓶颈就是企业的后端数据库,而MySQL更是重中之重,谁掌握了数据库技术,谁就能轻松拿到高薪,并且数据库管理岗位比其他岗位更受企业重视,因为数据安全是企业最重要的生命线,没有之一。由于老男孩平时教学十分繁忙,还要承担公司的管理工作,使得本书的写作一直断断续续。但是,在每次教学讲到MySQL技术时,老男孩就会想起读者和网友们的殷殷期待,于是又投入到写作中,本书就是在这种情况下完成的,在此特别感谢所有的读者和网友,没有你们的持续期待和支持,这本书就不会面世。

在长期的运维工作以及深度教学中,老男孩发现很多Linux运维人员以及大部分开发人员,都对数据库的技术一知半解,只停留在基本的安装和SQL简单使用上,更要命的是大家都觉得数据库很重要,但是在工作中又都很惧怕数据库的管理和维护。数据库的重要性是毋庸置疑的,但是数据库技术真的没那么难,更没那么可怕,只要稍加努力,普通人也可以掌握胜任数据库管理员岗位的绝大部分技能本领。

鉴于以上,作为一个曾经维护过数十台规模的混合数据库集群的过来人,老男孩决定写一本能让零基础新手以及Linux运维、开发入门人员都有信心掌握好数据库管理与维护的实战书籍,相信本书一定会让众多读者受益,提升他们的数据库管理和维护能力,实现加薪升职。本书旨在面向非专业专职数据库管理员,让所有的非专职技术人员能够具备独立(兼)管理中小企业数据库的实战能力。

本书是“跟老男孩学Linux运维”系列的第五本书(前4本已由机械工业出版社出版),更多“跟老男孩学Linux运维”实战系列图书在持续写作中,敬请期待。读者对象

·Linux入门与开发人员

·Linux运维工程师

·初中级数据库管理人员

·网络管理员和项目实施工程师

·Linux相关售前售后技术工程师

·开设Linux相关课程的大中专院校

·对Linux、MySQL数据库感兴趣的人群如何阅读本书

本书依然延续老男孩写书的特点,是一本偏重实战的MySQL图书,并非大而全,但处处可以体现实战二字,丰富的知识讲解取自企业中的实战案例解决方案,并结合老男孩十几年的数据库运维工作和教学工作进行了梳理。全书从脉络上共分为20章:

第1~4章为数据库知识简介,以及MySQL数据库单/多实例安装介绍和实践,内容简单易懂,让读者能够快速上手掌握MySQL。

第5~9章讲解的是企业中MySQL数据库的常用维护和管理知识及实践、常用管理SQL语句知识及实践、数据库备份和管理知识与实践,以及企业级数据库逻辑备份与物理备份实战案例,让读者切实掌握中小企业的数据库维护本领。

第10~13章讲解的是企业中MySQL数据库常用的日志、字符集、引擎等知识,并深入讲解核心引擎InnoDB,为学好数据库知识打下坚实的基础。

第14~17章讲解的是企业中MySQL数据库的最核心技术——主从复制知识,同时讲解主从复制的各种架构在企业中的实战应用、半同步与GTID下同步的应用。

第18~20章讲解的是企业中MySQL数据库集群的高可用方案以及MHA的实战案例、数据库读写分离中间件的实践、阿里云数据库RDS的基本应用实践。勘误和支持

由于老男孩的教学任务很重,课程较多,这本书基本上都是利用早晨和夜晚的时间完成写作的,限于本人的水平和能力,加之编写的时间仓促,书中难免有疏漏和不当之处,恳请读者批评指正。你可以将书中的错误发布在专门为本书准备的博客“http://www.itblogs.cn”评论处,同时不管你遇到何种问题,都可以加入为本书准备的QQ交流群465216827(加群说明:MySQL),我将尽力为读者提供最满意的解答。书中所需的工具等都将发布在上述博客中,我也会将工具相应功能的更新及时发布出来。如果你有更多的宝贵意见,欢迎发送邮件至我的邮箱oldboy@oldboyedu.com或者加老男孩助理的微信17600131504,加入本书的交流群,期待能够听到读者的真挚反馈。致谢

感谢前阿里云资深专家肖海波为本书贡献了第20章RDS数据库内容。

感谢老男孩教育高级讲师曾老师为本书贡献了MHA/Atlas等章节内容。

感谢老男孩教育高级讲师郭老师对本书部分内容的校对和提出的修改建议。

感谢老男孩教育的每一位在校学员——你们自觉努力地学习,使得我有较多的时间持续写作。感谢你们对老男孩教育的支持。

感谢老男孩教育的每一位老师,正是你们辛勤努力的工作,让我得以有时间完成此书。

感谢森华易腾的陆锦云女士及其同事,感谢你们提供的IDC机房带宽资源并长期支持,使得本书得以顺利完成!

感谢机械工业出版社华章公司的编辑杨绣国和温莉芳女士,感谢你们的不懈支持、包容和鼓励,正是你们的鼓励和帮助引导我顺利完成全部书稿。

感谢没有提及名字的所有学生、网友以及关心关注老男孩的每一个人。

最后要感谢我的父母、家人,正是你们的支持和体谅,让我有无限信心和力量去写作,并最终完成此书!

谨以此书,献给支持老男孩教育的每一位朋友、学员以及众多热爱Linux运维技术的人。老男孩中国,北京,2018年11月第1章数据库介绍与分类1.1 数据库介绍什么是数据库

简单地说,数据库(Database)就是一个存放计算机数据的仓库,该仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)对数据进行组织和存储,我们可以通过数据库提供的多种方法来管理其中的数据。

若以生活中的案例来进行更形象的描述,那么计算机里的数据库就是类似于人们存放杂物的储物间和仓库,它们的区别只是存放的东西不同,杂物间存放的是实体物件,而数据库里存储的是计算机数据。1.2 数据库的种类

按照早期的数据库理论,比较流行的数据库模型分为三种,分别为层次数据库、网状数据库和关系型数据库。而在当今的互联网企业中,最常用的数据库模型主要分为两种,即关系型数据库和非关系型数据库。我们不是写教科书,更不是研究数据库理论,因此,本书主要讲解关系型数据库和非关系型数据库NoSQL这两类最重要也是目前互联网企业里实际使用最多的数据库类型。1.2.1 关系型数据库介绍(1)关系型数据库的由来

虽然网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据的独立性和抽象级别上仍然存在很大的欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而关系型数据库则可以较好地解决这些问题。(2)关系型数据库介绍

关系型数据库模型可将复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如,老男孩IT教育某一期的学生表格(见表1-1)关系就是一个二元关系。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格进行分类、合并、连接或选取等运算来实现对数据的管理。

关系型数据库的诞生距今已有几十年,已经从理论逐步发展成为大家耳熟能详的企业产品,例如,最常见的MySQL和Oracle数据库,其中,Oracle在数据库领域里上升到了霸主地位,形成了每年高达数百亿美元的庞大产业市场,而MySQL也是不容忽视的数据库,近些年逐渐崛起,以至于被Oracle重金收购,目前它们占据了互联网领域90%以上的数据库市场份额。(3)关系型数据库表格之间的关系举例

前面已经讲过,数据库简单来说就是一个存放计算机数据的仓库,但是数据存放在数据库里还是有一定的组织形式的。在一个关系型数据库里,二维表格是组织数据的基本形式,每个不同的数据库里可以包含多张表格,例如,oldboy库里可以包含如下的表1-1~1-3。表1-1 学生表表1-2 课程表表1-3 学生选课表

而数据库里的每个表格又是由若干个列组成的,例如,表1-3中的学号、课程号、成绩都是组成表格的列,此外,一个表格可以有多个列,每个列又存储着不同的信息。

由此,我们可以理解列的概念了,列是表中的字段,所有的表都是由一个或多个列组成的。

数据库中的每个列(或称字段)都有相应的数据类型,数据类型定义每个列存储数据的类别,例如,如果某个列中希望存储的内容为数字,那么可以选择的数据类型为数字类型(int等);如果列中存储的是少量文本或日期,甚至是大量文本等类别,那么数据库都会对应不同的数据类型来进行存储。

由此我们就可以理解数据类型的概念了,数据类型用于定义每个列需要存储什么样的数据,每个列都可以根据存储数据的实际需要来设置数据类型,在指定数据类型的同时还可以指定存储数据的长度。

图1-1是关系型数据库表格的基本信息说明。图1-1 关系型数据库表格基本信息

关系型数据库知识和特点小结

1)关系型数据库在存储数据时实际上采用的就是二维表格形式(和Word、Excel里的表格几乎一样)。

2)市场上占有量较大的是MySQL和Oracle数据库,而互联网场景最常用的是MySQL数据库。

3)通过SQL(结构化查询语言)来存取、管理关系型数据库的数据。

4)关系型数据库在保持数据安全和数据一致性方面功能很强,遵循ACID理论(后文会讲此知识)。1.2.2 非关系型数据库介绍

1.非关系型数据库诞生的背景

非关系型数据库也称为NoSQL数据库,请注意,NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”(没有SQL)的意思。因此,NoSQL数据库的产生之初并不是要彻底地否定和终结关系型数据库,而是作为传统关系型数据库的一个有效补充。

随着互联网Web2.0、Web3.0网站的兴起,传统的关系型数据库在应付这些网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信等类型的动态网站时已经显得力不从心,暴露了很多难以克服的问题,例如,传统关系型数据库的I/O瓶颈、性能瓶颈等都难以有效突破。于是出现了大批针对特定场景,以高性能、高并发以及使用便利为目的的功能特异化的数据库产品,非关系型数据库就是在这样的情景中诞生并得到非常迅速发展的。在这些特定的场景下,NoSQL数据库可以发挥出难以想象的高效率和高性能。近年来,NoSQL这个术语得到了广泛认同。

NoSQL是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统的局面。NoSQL数据库的数据存储不需要固定的表结构,通常也不存在连接操作。其在大数据存取上具备关系型数据库无法比拟的性能优势,满足了企业应用需要将数据存储在横向且伸缩性上更强的功能需求。例如,Google的BigTable、Amazon的Dynamo都是非常成功的商业NoSQL实现。在开源的NoSQL体系中,从早期的Memcached缓存软件到当今Facebook的Cassandra、Apache的HBase,都得到了广泛应用,redis、MongoDB等新兴的NoSQL数据库,也逐渐受到各类公司的欢迎和追捧。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。

非关系型数据库(NoSQL)知识小结

1)NoSQL数据库不是否定关系型数据库,而是作为关系型数据库的一个重要补充。

2)NoSQL数据库为了适应灵活及高性能、高并发需求而生,忽略影响高性能、高并发的功能。

3)在NoSQL数据库领域,当今的最典型产品为redis(持久化缓存)、MongoDB、Memcached(纯内存)等。

4)NoSQL数据库没有标准的查询语言(SQL),通常使用REST式的数据接口或者查询API。

2.非关系型数据库种类介绍(1)键值存储数据库

键值(key-value)数据库类似于传统语言中使用的哈希表,可以通过key来添加、查询或者删除数据,因为是使用key主键访问,所以会获得很高的性能及扩展性。

键值数据库主要使用一个哈希表,表中有一个特定的键和一个指针(指向特定的数据)。对于IT系统来说,key/value模型的优势在于简单、易部署、高并发。

下面就来举例说明。

k1→oldboy,k1是键,相当于学号,oldboy对应的就是真实的数据,相当于具体的人。

k2→oldgirl,k2是键,相当于学号,oldgirl对应的就是真实的数据,相当于具体的人。

我们要找人,首先定位学号(k1,k2),然后再找到具体的数据(oldboy、oldgirl)。

键值存储数据库的典型产品为Memcached、redis。提示:Memcached、redis是互联网领域里中小型企业网站使用最多的NoSQL数据库种类。(2)列存储数据库

列存储(column-oriented)数据库会将数据储存在列族(column family)中,一个列族通常存储会被一起查询的相关数据。举个例子,对于Person类,我们通常会查询他们的姓名和年龄,而不是薪资。在这种情况下,姓名和年龄就会放入一个列族中,而薪资则放在另一个列族中。

这部分数据库通常用于应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列族来安排的。

列存储数据库的典型产品为Cassandra、HBase。提示:Cassandra、HBase是互联网领域大型门户网站使用较多的NoSQL数据库种类。例如,新浪、京东网站使用的是HBase(曾经笔者所在培训机构的DBA老师就曾经在新浪公司维护数台HBase集群),360安全公司使用的是Cassandra(笔者的学生曾在该公司维护数百台Cassandra集群)。(3)面向文档的数据库

面向文档(document-oriented)的数据库的灵感来自于Lotus Notes办公软件,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。面向文档(document-oriented)的数据库可以看作键值数据库的升级版,允许之间嵌套键值。而且面向文档(document-oriented)的数据库比键值数据库的查询更高效。

面向文档的数据库会将数据以文档的形式储存。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个与名称对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象等。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储。

面向文档的数据库的典型产品为MongoDB。提示:MongoDB是互联网领域里中小型企业比较常用的面向文档的数据库种类,在部分企业里,可以替代MySQL作为数据库使用。(4)图形数据库(了解即可)

图形(graph)数据库允许我们将数据以图形的方式进行存储。实体会被作为顶点,而实体之间的关系则会被作为边。比如我们有三个实体Steve Jobs、Apple和Next,则会有两个“Founded by”的边将Apple和Next连接到Steve Jobs。

图形结构的数据库与其他行列以及刚性结构的SQL数据库不同,它使用的是灵活的图形模型,并且能够扩展到多个服务器上。

图形数据库的典型产品为Neo4J、InfoGrid提示:在笔者工作的十多年里,没有使用过图形数据库,不过根据国外网站数据库排名信息来看,Neo4J上升到了21位(截至笔者写作时),看来该软件正在被越来越多的人所熟知,我们对它保持关注吧,建议简单了解就可以了。1.3 常用关系型数据库产品介绍1.3.1 Oracle数据库

Oracle前身叫作SDL,由Larry Ellison和另外两个开发人员于1977年创办,他们开发了自己的拳头产品,在市场上大量销售,1979年,Oracle公司引入了第一个商用SQL关系型数据库管理系统。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系型数据库产品的市场占有率很高。

Oracle公司是目前全球最大的数据库软件公司,也是近年来业务增长极为迅速的软件提供商与服务商。

2007年7月,Oracle公司在美国纽约宣布推出数据库Oracle 11g,这是Oracle数据库的较新版本。据官方介绍,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。Oracle 11g在安全、XML DB、备份等方面得到了很大的提升。

主要的应用企业包括传统大企业、大公司、政府、金融、证券等。

版本包括Oracle 8i、Oracle 9i、Oracle 10g、Oracle 11g、Oracle 12c等。1.3.2 MySQL数据库

MySQL数据库是一个开源的中小型关系型数据库管理系统,由瑞典MySQL AB公司开发。该公司于2008年被Sun公司收购,后Sun公司又被Oracle公司收购。目前MySQL被广泛地应用于各大中小型网站中。由于其具有体积小、速度快、总体拥有成本低,且开放源码等特点,因此许多大中小型网站选择它作为网站数据库,从而降低网站总体拥有成本,甚至国内知名的淘宝网也选择弃用Oracle而更换成更为开放的MySQL。

MySQL数据库的应用范围主要包括互联网领域、大中小型网站、游戏公司、电商平台等,因用户广泛,其产生了很多高并发的成熟解决方案,因此传统企业的用户也在逐渐增多。1.3.3 MariaDB数据库

MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权许可。开发这个MariaDB数据库分支的可能原因之一是:Oracle公司收购了MySQL之后,有将MySQL闭源的潜在风险,因此MySQL开源社区采用分支的方式来避开这个风险。

开发MariaDB数据库的目的是完全兼容MySQL数据库,包括API和命令行,使之能够轻松地成为MySQL的替代品。在存储引擎方面,它使用XtraDB来代替MySQL的InnoDB。MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给Sun,此后,随着Sun被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB数据库的名称来自MySQL的创始人Michael Widenius的女儿Maria的名字。

MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,使用Percona的XtraDB替换了MySQL的InnoDB存储引擎。

MariaDB数据库的早期版本,均依照MySQL的版本发行。因此,使用MariaDB的人都会从MySQL中了解到MariaDB的相关功能,学习MySQL数据库的人,也可以轻松上手掌握MariaDB数据库。1.3.4 SQL Server数据库

Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面、效率高,可以作为中型企业或单位的数据库平台。由于SQL Server与Windows操作系统紧密集成,所以不论是应用程序的开发速度,还是系统事务处理的运行速度,都得到了较大的提升。对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的选择。但SQL Server也有它的缺点,即只能在Windows系统下运行。

1987年,微软和IBM合作开发完成OS/2,IBM在其销售的OS/2 ExtendedEdition系统中绑定了OS/2 Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase签订了合作协议,使用Sybase的技术开发了基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0版。Microsoft在与Sybase分道扬镳之后,在其6.05和7.0版本中重写了核心数据库系统,最终形成了如今的SQL Server。

SQL Server数据库主要应用于使用Windows服务器平台的企业。1.3.5 Access数据库

美国Microsoft公司于1994年推出了微机数据库管理系统。它结合了Microsoft Jet Database Engine和图形用户界面两项特点,是Microsoft Office的成员之一。具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面关系型数据库管理系统。Access能够存取Access/Jet、Microsoft SQL Server、Oracle,或者任何ODBC兼容数据库的资料。Access界面友好而且易学易用,作为Office套件的一部分,可以与Office集成,实现无缝连接,Access提供了表(Table)、查询(Query)、窗体(Form)、报表(Report)、宏(Macro)、模块(Module)等用来建立数据库系统的对象,而且还提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化。

Access是入门级小型桌面数据库,性能、安全性都很一般。可供个人管理或小型网站之用。Access不是数据库语言,只是一个数据库程序。集成于Office中。其主要具有如下特点。

·完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。

·强大的数据处理功能,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。

·可以方便地生成各种数据对象,利用存储的数据建立窗体和报表,可视性好。

·作为Office套件的一部分,可以与Office集成,实现无缝连接。

·能够利用Web检索和发布数据,实现与Internet的连接。Access主要适用于中小型应用系统,或者作为客户机/服务器系统中的客户端数据库。

早期应用领域为小型程序系统ASP+Access系统,例如,留言板、校友录、BBS等,目前在互联网场景下使用得较少。1.3.6 PostgreSQL数据库

PostgreSQL是加州大学伯克利分校计算机系开发的,以POSTGRES为基础,后来更名为PostgreSQL,它是除了MySQL之外发展较快的另一个关系型数据库管理系统(RDBMS)。

PostgreSQL在灵活的BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如MySQL)和专有系统(比如Oracle、Sybase、Microsoft SQL Server)之外的另一种选择。

PostgreSQL支持大部分SQL标准,并且提供了非常多的特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引等来扩展。任何人都可以免费使用、修改和分发PostgreSQL,不管是私用、商用,还是学术研究使用,目前数据库产品排名在第四位,是一个很有潜力的数据库,但不建议新手或者经验欠缺的企业人员使用。1.3.7 其他不常用的关系型数据库

本书主要关注互联网领域常用的数据库产品,像DB2、Informix、Sybase等在互联网公司几乎见不到,因此这里就不多介绍了。1.4 常用非关系型数据库产品介绍1.4.1 Memcached(key-value)

Memcached是一个开源的、支持高性能、高并发的分布式内存缓存系统,由C语言编写,总共2000多行代码。从软件名称上看,前3个字符“Mem”就是内存的意思,而接下来的5个字符“Cache”就是缓存的意思,最后一个字符d,是daemon的意思,代表是服务端守护进程模式服务。

Memcached服务分为服务端和客户端两部分,其中,服务端软件的名字形如Memcached-1.4.24.tar.gz,客户端软件的名字形如Memcached-2.25.tar.gz。

Memcached软件诞生于2003年,最初由LiveJournal的Brad Fitzpatrick开发完成。Memcache是整个项目的名称,而Memcached是服务器端的主程序名,因其协议简单,应用部署方便且支持高并发,因此广泛应用于互联网企业,直到现在仍然如此。其官方网站地址为:http://memcached.org/。

缓存一般用于保存一些经常被存取的对象或数据(例如,浏览器会把经常访问的网页缓存起来),通过缓存来存取对象或数据要比在磁盘上存取快很多,因为前者使用的是内存,后者使用的是磁盘。Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在Memcached的内存中,程序通过API的方式存取这些被缓存的数据,Memcached里面的数据就像一张巨大的HASH表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出速度更快的可扩展的Web应用。

由于Memcached为纯内存缓存软件,一旦重启,所有的数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事务恢复能力、持久化数据存储能力和分布式复制能力,Memcachedb非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年其正逐渐被其他的持久化产品所替代,例如redis。

有关Memcached的知识小结

1)Memcached为key-value型数据库。

2)Memcached为纯内存数据库。

3)Memcached相关持久化产品Memcachedb、Tokyo Cabinet\Tokyo Tyrant(ttserver)。

4)Memcached企业级讲解见《跟老男孩学Linux运维:Web集群[1]实战》第13章。

[1] 该书已由机械工业出版社出版,书号为ISBN978-7-111-52983-5。——编辑注1.4.2 redis(key-value)

和Memcached类似,redis也是一个key-value型存储系统。但redis支持的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove和取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础之上,redis支持各种不同方式的排序。与Memcached一样,为了保证效率,redis的数据都是缓存在内存中的。区别是redis会周期性地把更新的数据写入磁盘或者把修改操作写入追加的记录文件中,并且在此基础之上实现master-slave(主从)复制。

redis是一个高性能的key-value数据库。redis的出现,在很大程度上补偿了Memcached这类key/value软件的不足,在部分场合还可以对关系型数据库起到很好的补充作用。它提供了Python、Ruby、Erlang和PHP客户端,使用很方便。

redis的官方网址为http://www.redis.io/documentation。

redis知识小结

1)支持内存缓存,这个功能和Memcached相同。

2)支持持久化存储,这个功能和Memcachedb、ttserver相同。

3)数据类型更丰富。比其他key-value库功能更强。

4)支持主从、分布式等集群模式。

5)支持队列等特殊功能。1.4.3 MongoDB(document-oriented)

MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的一种产品。它支持的数据结构非常松散,类似JSON的bjson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是其所支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系型数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。

其主要功能特性具体如下。

·面向集合存储,易存储对象类型的数据。“面向集合”(collenction-orented),意思是数据被分组存储在数据集中,称为一个集合(collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似于关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

·模式自由(schema-free),这意味着对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。

·支持动态查询。

·支持完全索引,包含内部对象。

·支持查询。

·支持复制和故障恢复。

·使用高效的二进制数据存储,包括大型对象(如视频等)。

·自动处理碎片,以支持云计算层次的扩展性。

·支持Ruby、Python、Java、C++、PHP等多种语言。

·文件存储格式为BSON(JSON的一种扩展)。BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。

此外,还可以通过网络访问。MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,而且它是把数据存储在文件中的,为提高效率其使用内存映射文件进行管理。

关于MongoDB更详细的文档请见http://www.mongodb.org/display/DOCS/Manual

Documentation:http://www.mongodb.org/display/DOCS/Home。

MongoDB是很有发展潜力的课程之一,后续会重点讲解该软件。1.4.4 Cassandra(column-oriented)

Apache Cassandra是一套开源分布式key-value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook目前使用的正是此系统。

Cassandra的主要特性如下所示。

·分布式。

·基于列的结构化。

·高伸展性。

Cassandra的主要特点是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。

Cassandra是一个混合型的非关系型数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的key-value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面很理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(column family)的数据模型。P2P去中心化的存储,在很多方面都可以称为Dynamo 2.0。

Cassandra的官方网址为:http://cassandra.org。1.4.5 其他非关系型数据库

除此之外,其他非关系型数据库还有HBase、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver)等。1.5 数据库相关知识1.5.1 数据库发展历史大事记

1951:Univac系统使用磁带和穿孔卡片作为数据存储。

1956:IBM公司在其Model 305 RAMAC中第一次引入了磁盘驱动器。

1961:通用电气(GE)公司的Charles Bachman开发了第一个数据库管理系统IDS。

1969:E.F.Codd发明了关系型数据库。

1973:由John J.Cullinane领导Cullinane公司开发了针对IBM主机的基于网络模型的数据库IDMS。

1976:Honeywell公司推出了第一个商用关系型数据库产品Multics Relational Data Store。

1979:Oracle公司引入了第一个商用SQL关系型数据库管理系统。

1983:IBM推出了DB2数据库产品。

1985:为Procter & Gamble系统设计的第一个商务智能系统产生。

1991:W.H.“Bill”Inmon发表了“构建数据仓库”。1.5.2 数据库软件企业应用排名及发展趋势参考

2013年数据库软件企业应用排名如图1-2所示。图1-2 2013年数据库软件企业应用排名

2015年数据库软件企业应用排名如图1-3所示。图1-3 2015年数据库软件企业应用排名

2016年数据库软件企业应用排名如图1-4所示。图1-4 2016年数据库软件企业应用排名

2017年数据库软件企业应用排名趋势如图1-5所示。图1-5 2017年数据库软件企业应用排名

2018年数据库软件企业应用排名如图1-6所示。图1-6 2018年数据库软件企业应用排名

上述内容源自http://db-engines.com/en/ranking。

从图1-6所示的2018年的数据库软件企业应用排名趋势可以看出,Oracle依然是稳坐第一,但是已有落后的趋势了,即将讲解的“主人公”MySQL稳坐第二,如果再加上同源的MariaDB,则已经超过了Oracle的排名,而后面的PostgreSQL、MongoDB的上升趋势也较明显,因此,建议大家重点掌握MySQL,其次是MongoDB。1.6 本章重点

1)关系型数据库知识及特点介绍。

2)关系型数据库的典型产品介绍及应用场景说明。

3)非关系型数据库知识及特点介绍。

4)非关系型数据库典型产品介绍及应用场景说明。

5)常见数据库产品的发展趋势排名。1.7 章节试题

1)什么是关系型数据库,其有什么特点?

2)关系型数据库的典型产品有哪些,各自对应什么应用场景?

3)什么是非关系型数据库,其有什么特点?

4)非关系型数据库的常见种类及相应的典型产品有哪些?

5)请分别说出5个最流行的关系型和非关系型数据库产品名称。第2章MySQL数据库入门知识介绍2.1 MySQL介绍2.1.1 MySQL简介

前面已经介绍过,MySQL属于传统的关系型数据库产品,其开放式的架构使得用户的选择性很强,而且随着技术的逐渐成熟,MySQL支持的功能也越来越多,性能也在不断地提高,对平台的支持也在增多,此外,社区的开发与维护人数也很多。当下,MySQL因为其功能稳定、性能卓越,且在遵守GPL协议的前提下,可以免费使用与修改,因此深受用户喜爱。

我们知道,关系型数据库的特点是将数据保存在不同的表中,再将这些表放入不同的数据库中,而不是将所有的数据统一放在一个大仓库里,这样的设计加快了MySQL的读取速度,而且它的灵活性和可管理性也得到了很大的提高。访问及管理MySQL数据库的最常用标准化语言为SQL——结构化查询语言。SQL使得对数据库进行存储、更新和存取信息的操作变得更加容易。例如,你能用SQL为一个网站检索产品信息及存储用户信息、博文、帖子等,有关SQL的知识后文会详细讲解。2.1.2 MariaDB数据库的诞生背景介绍

自甲骨文公司收购MySQL之后,MySQL在商业数据库与开源数据库领域的市场占有份额都跃居第一,这样的格局引起了部分业内人士的担忧,因为商业数据库的老大有可能将MySQL闭源,为了避免Oracle将MySQL闭源,而无开源的类MySQL数据库可用,MySQL社区采用了分支的方式——MariaDB数据库就这样诞生了,MariaDB是一个向后兼容的数据库产品,可能会在以后替代MySQL,其官方地址为https://mariadb.org/。不过,这里还是建议大家选择更稳定且使用更广泛的MySQL数据库,可以先测试MariaDB数据库,等使用的人员多一些,社区更活跃后再正式考虑使用也不迟。2.1.3 为什么选择MySQL数据库

毫无疑问,选择MySQL数据库已是既成事实,绝大多数使用Linux操作系统的互联网网站都在使用MySQL作为其后端的数据库存储方式,从大型的BAT门户到电商平台、分类门户等无一例外。那么,MySQL数据库到底有哪些优势和特点,让大家不约而同地选择它呢?

原因可能有以下几点。

·MySQL性能卓越,服务稳定,很少出现异常宕机的情况。

·MySQL开放源代码且无版权制约,自主性强,使用成本低。

·MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。

·MySQL软件体积小,安装使用简单,并且易于维护,安装及维护成本低。

·MySQL品牌口碑效应好,使得企业无须考虑即可直接用之。

·LAMP、LNMP、LNMT(tomcat)等流行Web架构都含有MySQL。

·MySQL支持多种操作系统,提供了多种API,支持多种开发语言,特别是对流行的Java、Python、PHP等语言都有很好的支持。提示:官方给出的使用MySQL理由见http://www.mysql.com/why-mysql/topreasons.html。2.2 MySQL数据库分类与版本升级

MySQL数据库的官方网站为http://www.mysql.com,其发布的MySQL版本采用双授权政策,和大多数开源产品的路线一样,MySQL数据库也有社区版和企业版之分,且这两个版本又各自分了四个版本依次发布,这四个版本分别为:Alpha版、Beta版、RC版和GA版本。2.2.1 MySQL数据库企业版与社区版的区别

1.MySQL数据库企业版介绍

MySQL企业版由MySQL AB公司内部专门的人员负责开发及维护,但同时也会吸纳社区人员编写的优秀代码及算法,并且由他们严格按照软件测试流程对这些采纳的代码进行测试,确定没有问题之后才会进行发布。简单地说,MySQL企业版是由MySQL公司内部发布的,它参考了社区版的先进代码功能和算法,是MySQL公司的赢利产品,需要付费才能使用及提供服务支持,稳定性和可靠性无疑都是最好的,当然了,企业腰包得够鼓才能买得起。据老男孩了解的信息,某知名分类门户网站2008年就购买过MySQL企业版,价格不比那些闭源的商业数据库便宜,也是大几十万。

2.MySQL数据库社区版介绍

MySQL社区版则是由分散在世界各地的MySQL开发者、爱好者以及用户参与开发与测试的,包括软件代码的管理、测试工作,也是他们在负责。社区也会设立BUG汇报机制,收集用户在使用过程中遇到的BUG情况,相比于企业版,社区版的开发及测试环境没有那么严格。

3.MySQL数据库企业版与社区版的区别

MySQL是成熟产品,企业版与社区版之间在性能方面相差不大。它们的区别主要集中在以下几个方面。

·企业版本组织管理与测试环节控制更严格,稳定性更好。

·企业版不遵守GPL协议,社区版遵守GPL协议,可以免费使用!

·使用企业版后可以购买相关的服务,比如,享受7×24小时的技术支持以及定时打补丁等服务,但是用户必须为此支付服务费用。社区版的服务质量与时效性等就无法与企业版相比了。

·社区版本的维护服务只能靠社区提供,其无法像企业版本那样获得故障及补丁解决服务,但是,使用社区版是完全免费的方式。2.2.2 MySQL数据库的四种发布版本介绍

前面已经阐述过,MySQL的版本发布采用的是双授权政策,即分为社区版和企业版,而这两个版本又各自分为四个版本,依次发布:Alpha版、Beta版、RC版和GA版本。

这四种发布版本之间的说明及区别具体如下。(1)Alpha版

Alpha版一般只在开发的公司内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。MySQL属于开放源代码的开源产品,因此需要世界各地的开发者、爱好者和用户参与软件的开发、测试和手册编写等工作。自然也就必须对外公布此版本的源码和产品了,以方便他人参与开发或测试工作,甚至编写与修改用户手册。(2)Beta版

Beta版一般是完成功能的开发和所有的测试工作之后的产品,不会存在较大的功能或性能上的BUG,通常会邀请或提供给用户体验与测试,以便更全面地测试软件的不足之处或存在的问题。(3)RC版

RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta版本的测试结果,收集到的BUG或缺陷等信息,进行修复和完善之后的一版产品。(4)GA版

GA版是软件产品正式发布的版本,也称生产版本的产品。一般情况下,企业的生产环境都会选择GA版本的MySQL软件,用于真实的生产环境中。偶尔有个别大型企业会为追求新功能驱动而牺牲稳定性使用其他版本,但只是个例。

既然有四种发布版本,那么如何进行选择呢?

MySQL AB官方网站会把各种数据库版本都上传到网站,以供不同的用户下载,主要是MySQL数据库是属于开放源代码的数据库产品,其鼓励全球的技术爱好者参与研发、测试、文档编写和经验分享,甚至还包括产品的发展规划。对于Development版本、Alpha版本和Beta版本,应禁止在生产环境中使用,因为很可能会存在重大的问题或是有些功能未被完全实现。绝大多数情况下,RC版本也是不允许使用在生产环境中的,毕竟这是一个在GA版本之前(也即生产版本发布之前)的小版本。另外,对于MySQL数据库GA版本,也需要慎重选择,开源社区的产品毕竟不是经过严格的测试工序完成的,是全球开源技术人员自愿完成的,会存在比商业产品稳定性弱的缺陷。更严格的选择后面会有进一步的说明。

国内门户提供的MySQL下载地址:http://mirrors.sohu.com/mysql/2.3 MySQL数据库软件的命名介绍

MySQL数据库软件的版本号是由3个数字和一个后缀组成。例如,mysql-5.6.40.tar.gz的版本号,其数字的含义分别如下。

·第1个数字(5)是主版本号,描述了文件格式。所有版本5的发行都有相同的文件格式。

·第2个数字(6)是发行级别。主版本号和发行级别组合到一起便构成了发行序列号。

·第3个数字(40)是指在此发行系列的版本号,随每个新分发版而递增。通常你需要已经选择的发行(release)的最新版本(版本)。

每次更新之后,版本字符串的最后一个数字会递增。如果是相对于前一个版本增加了新功能或有微小的不兼容性,那么字符串的第二个数字会递增。如果文件格式改变,那么第一个数字会递增。

至于版本号中的后缀,那是用来显示发行的稳定性级别的,通过这一系列后缀显示如何改进稳定性。可能的后缀有:alpha版、beta版、rc版、没有后缀(稳定版或GA版)。这几个后缀对应的说明可参见2.2.2节。2.4 MySQL产品路线2.4.1 MySQL产品路线变更历史背景

早期,MySQL也是遵循版本号逐渐增加的方式发展,格式形如mysql-X.XX.XX.tar.gz,例如,老DBA都非常熟悉的生产场景下的版本:MySQL 4.1.7、MySQL 5.0.56等。

近几年,为了提高MySQL产品的竞争优势,提高性能、降低开发维护成本等,也为了方便企业用户更精准地选择合适的版本,MySQL在发展到5.1系列之后,又重新规划为三条产品线。下面一起来看看。2.4.2 MySQL-5.0.xx到MySQL-5.1.xx的产品线

第一条产品线为:MySQL 5.0.xx升级到MySQL 5.1.xx,这条产品线继续完善与改进其用户体验和性能,同时又增加了新功能,可以说这条路线是MySQL早期产品的延续,这一系列产品的发布情况及历史版本如下。

MySQL 5.1是当前的稳定发布系列版本。只针对漏洞修复重新发布;没有增加会影响稳定性的新功能。

MySQL 5.0是前一个稳定发布系列版本。只针对严重漏洞修复和安全修复重新发布;没有增加会影响该系列的重要功能,并且官方也很快停止了对其的支持。

MySQL 4.0和MySQL 3.23是旧的稳定发布系列版本。该版本建议不再使用,并且官方已经停止了对其的支持。

目前Red hat linux 7以及CentOS 7以前的官方yum源里附带的还是MySQL 5.1的版本,但是在绝大多数的大型互联网企业的重要场景里,已经罕见5.1版本了,当下,本系列的产品线已经发布到了5.2系列(非稳定版)。2.4.3 MySQL-5.4.xx到MySQL-5.7.xx产品线

为了更好地整合MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法等,从而更好地支持SMP架构并提高性能,第二条产品线做了大量的代码重构。版本编号从5.4.xx开始,最新稳定版为5.7.xx,目前发展到了6.0.xx和8.0.xx(非稳定版)。

据官方讲,MySQL 5.6是有史以来最好的版本,是世界上使用最广的开源数据库,它提供了一套新的、先进的功能,使我们能够建设新一代基于网络和嵌入式的应用和服务。

在企业中,目前是MySQL 5.5和MySQL 5.6并存的主流时代,MySQL 5.7是未来,本书的讲解主要以MySQL 5.6大版本为主,同时兼顾MySQL 5.5,并尽可能兼顾MySQL 5.7。2.4.4 MySQL-Cluster-6.0.xx到MySQL-Cluster-7.5.xx产品线图2-1 MySQL的各版本发展的参考图

为了更好地推广MySQL Cluster版本,提高MySQL Cluster的性能和稳定性,改进和增加功能,使其对Cluster存储引擎提供更有效的支持与优化,因此研发了第三条产品线。该产品线的版本号为6.0.xx,目前已发展到7.5.xx。

图2-1为MySQL各版本的发展参考图,对应时间一般为最后更新时间,而非发布时间。2.5 生产场景中如何选择MySQL版本2.5.1 MySQL数据库发布特性

商业软件研发和发行公司,都会提供经过完整测试,甚至多种用户环境模拟测试及试用之后,才推出的稳定的生产环境版本,这也使得技术人员对于商业数据库软件的选择,一般不需要有太多的顾虑与考虑。

在大公司(像BAT等),对于数据库软件版本的选择,也会有相关人员详细阅读其新功能或改进点知识,并且会做很多相关的研究和测试工作,最后才逐步上线,而且是从边缘业务慢慢过渡到核心业务。

目前,对于MySQL的企业版本,需要注册账号才可以下载到编译过的安装包或源代码,而且账号只有一个月的有效期;社区版本的MySQL产品,则不需要注册账号,只要填写一些信息即可转到下载页面。2.5.2 企业生产场景选择MySQL数据库的建议

企业生产场景下,数据库是重中之重,因此选择MySQL数据库一定要慎重。下面是给出的一些选择建议。

1)一定要选稳定版版本,即选择开源的社区版的稳定版。

2)产品线选择,建议选择第二条产品线中的5.5或5.6版本。目前互联网公司主流版本是5.5和5.6。

3)选择MySQL数据库至少发布半年以上的稳定版本。

4)要尽可能选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本。

5)最好选择向后较长时间没有更新发布的版本。

6)要考虑开发人员开发程序使用的版本是否兼容你所选的版本。

7)首先作为内部开发测试数据库环境,测试运行几个月的时间。

8)优先对企业非核心业务采用新的数据库稳定版本软件。

9)向高手请教或者在及技术氛围好的群里和大家一起交流,使用真正的高手用过的、好用的且BUG少的GA版本产品。

经过上述工序之后,若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何业务数据服务的后端数据库软件了。

上述为选择的流程建议,实际上很多中小公司都会直接选择GA版的最新版本,如果业务中使用的功能比较单一,且数据和访问量不是很大,一般也不会有什么大问题,上述选择的建议,是以大规模大数据量高并发,使用数据库功能较多的场景为前提进行讲解的,对于这类场景,一定要慎重选择。

参考资料:

http://baike.baidu.com/view/24816.htm

http://baike.baidu.com/view/2521908.htm2.6 章节试题

1)在企业中如何正确选择MySQL的版本?

2)请描述MySQL的不同产品路线及发展情况?

3)MySQL与MariaDB的基本区别是什么?

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载