数据库入门理论知识介绍以及编译安装MySql
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
前言:
1.目前90%以上的公司面临的运维的瓶颈都在后端
最常见的2大瓶颈就是:
1>.数据库(极难扩展);
2>.存储;
所以说做互联网的运维工程师要是把以上两点问题解决就可以轻松的搞定整个架构
2.什么是数据库:
查百度上有长篇大论了一下数据库特点,我们可以简单的理解:
数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据
一.数据库的种类:
1.关系型数据库:
1>.关系型数据库的由来
虽然网状数据库和层次数据库已经很好的解决了数据的集中和共享的问题,但是在数据独立性和抽象级别上仍有很大缺陷。用户在对这两种数据库进行存取时,仍然需要明确数据的结构,指出存取路径,而关系数据库就可以较好的解决这些问题。
2>.关系型数据库介绍
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如在新员工入职的时候公司都会给你一个编号,这个编号和该员工是一一对应的,这就是一个二元关系,在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分类,合并,连接或者选取等运算实现数据的管理(结构化查询语言,sql语句来对数据进行处理)。
关系型数据库诞生至今已经已有40多年了(数据库诞生已经60多年了),从理论产生发展到现实产品,例如:大家最常见的myql和oracle数据库,oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而mysql也会不容忽视的数据库,以至于被oracle重金收购了。(2008年mysql【10亿美金】被sun收购了,之后sun公司又被oracle收购了)
3>.关系型数据库表格之间的关系举例:
员工信息表:
员工ID 姓名 年龄 所在部门
520 尹正杰 25 内部运维
2.非关系型数据库(NOSQL):
非关系型数据库也被称为NOSQL数据库,请读者注意,nosql的本意是“not only sql”,指的是非关系型数据库,而不是no sql的意思,因此。Nosql数据库产生并不是要彻底的否定关系型数据库,而是作为传统关系型数据库的一个有效的补充,NoSql传统数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
随着互联网web2.0(以用户为主体,上传下载,发布帖子,博客等动态应用不较多。)网站的兴起,传统的关系型数据库在应付web2.0网站,特别是对于规模日益扩大的海量数据,超大规模的高并发的微博,微信,SNS类型的wen2.0纯动态网站已经显得力不从心,暴露了很难克服的问题,例如:传统的关系型数据库IO瓶颈,性能瓶颈都难以有效突破,于是开始了大批针对特定场景,以高性能和使用便利为目的的功能特异化数据库产品,Nosql类的数据库就是这样的情景中诞生并得到非常迅速的发展。
Nosql是非关系型数据库的广义定义。它打破了长久以来关系型数据库与ACID理论大一统局面。Nosql数据库存储不需要固定的表结构,通常也不存在连接操作,在大数据存取上具备关系型数据库无法比拟的性能优势,还术语(Nosql)在2009年初得到了广泛的认同。
当今应用体系结构需要数据存储在横向伸缩性上有能够满足需求。而Nosql存储就是为了实现这个需求而诞生的。googel的bigtable与amazon(亚马逊)的dynamo是非常成功的商业nosql实现。一些开源的nosql体系,如facebook的Cassandra,apache的HBase,也得到了广泛认同,Redis,mongodb也逐渐的越来越受到各大类中小型公司的欢迎和追捧。
二.非关系型数据库的种类:
1>.键值(key—value)存储数据库
键值数据库就类似传统中语言中使用的哈希表。开源通过key来添加,查询,或者删除数据,因为Key使用主键访问。所以会获得很高的性能及扩展性。
键值数据库主要是使用一个哈希表,这个表中有定义的一个而定的键和一个指针指向特定的数据,key/value模型对于iT系统来说的优势在于简单,易部署,高并发。
典型产品:Memcached(支持内存); Redis(持久化的数据库,支持内存数据,也支持磁盘的数据); MemchedDB; Berkeley DB
2>.列存储(column-oriented)数据库
列存储数据库将数据库存储的列族(column family)中,一个列族存储经常被一起查询的相关数据,举个例子,比如我们又一个公司员工信息的类,我们通常会一起查他们的姓名和年龄而不是工资,这种情况下,姓名和年龄就是会被存放人一个列族中。而薪资则在另一个列族中
这部分数据库通常是用来应付分布式存储的海量数据。键值仍然存在,但是他们的特点是指向了多个列。这些列是由列家族带来的安排的、
典型产品:Cassandra【360公司用】; HBase【新浪】(月薪低于1.5万的运维就没有必要玩他了),一般的中小型也用不了
3>.面向文档(Document-Oriented)数据库
文档型数据库的灵感来自于lotus notes办公软件的。而且它同第一种键值存储相类似。该类型的数据库模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON,文档型数据库可以看作是键值数据库的升级版本,允许之间嵌套键值。而且文档型数据库逼键值数据库的查询效率更好。
典型产品:MongoDB(建议了解下),CouchDB
4>.图像(Graph)数据库
图形数据库允许我们将数据库以图的方式存储。实体被称作为顶点,而实体之间的关系则会被作为边。比如我们又三个实体, steve,jobs,apple和next。则会有两个"Founded by"的边将apple和next连接到steve jobs。
典型产品:Neo4J,infoGrid
三.常用关系型数据库产品介绍
1.Oracle数据库
Oracle前身叫SDL,由Larry Ellison 和另外两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979年,Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有数一数二。
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供商与服务商。
2007年7月12日,甲骨文公司在美国纽约宣布推出数据库Oracle 11g,这是Oracle数据库的最新版本。Oracle介绍说,Oracle 11g有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。Oracle 11g在安全,XML DB,备份等方面得到了很大提升。
主要应用范围:传统大企业,大公司,政府,金融,证券等等。(互联网公司一般不用,如果入职互联网公司的话建议不要学习它,而且会这个数据库的人员几乎已经饱和。)
版本升级:Oracle8i,Oracle9i,Oracle10g,Oracle11g
2.MySQL数据库
MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购,后Sun公司又被oracle公司收购。目前MySQL被广泛应用在Internet上的大中小行网站中。由于其体积小,速度快。总体拥有成本低。尤其是开源代码这一特点,许多大中小型网站为了降低网站总体拥有成本而选择了MySQL。
MySQL数据库主要应用范围:互联网领域,大中小型网站,游戏公司,电商平台等等。
3.MariaDB数据库
MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开源社区维护,采用GPL授权许可。开发这个MariaDB数据库分支的可能原因之一是:甲骨文公司被收购了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(InnoDB的变体)。这个版本还包括了PrimeBase XT(PBXT)和Federated存储引擎。
MariaDB数据库直到5.5版本,均依照MySQL的版本发行。因此,使用MariaDB5.5的人会从MySQL5.5中了解到MariaDB的所有功能。
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 Server1.0版。Microsoft在与Sybase分道扬镳后,随后在其6.05与7.0版本中重写了核心数据库系统,如今SQL Server 2008已经到来。
主要应用范围:部分企业电商(央视购物),使用weindows服务器平台的企业。
windows开发平台:".net","c#","Sql Server“
web服务器:“IOS”
linux平台:“apache”,“nginx”,“php”,“java”,”MySQL“,”Oracle“
5.Access数据库
美国Microsoft公司与1994年推出的微机数据库管理系统。它具有界面友好,易学易用,开发简单,接口灵活等特点。是典型的新一代桌面关系型数据库管理系统。它结合了Microsoft Jet Database Engine 和图形用户界面两项特点,是Microsoft Office的成员之一。
Access能够存取Access/Jet,Microsoft SQL Server,Oracle,或者任何ODBC兼容数据库的资料。Access界面友好而且易学易用,作为Office套件的一部分,可以与Office集成,实现无缝连接Access提供了表(Tables),查询(Query),窗体(From),报表(Report),宏(Macro),模块(Module)等用来建立数据库系统的对象。提供了多种想到,生成器,模板,把数据存储,数据查询,界面设计,报表生成等操作规范化。
Access是入门小型左面数据库,性能安全性都很一般,可供个人管理小型网站之用。Access部署数据库语言,只是一个数据库程序。目前最新版本是Office2007.其主要特点如下:
1>.完善的管理各种数据库对象,具有强大的数据组织,用户管理,安全检查等功能。
2>.强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(DBASE,FoxBASE的统称)数据库系统无法实现的客户服务器(Client/Server)结构和相应的数据库管理安全机制,Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。
3>.可以方便的生成各种数据对象,利用存储的数据建议窗体和报表,可视性好。
4>.作为Office套件的一部分,可以与Office集成,实现无缝连接。
5>.能够利用Web检索和发布数据,实现与Intetnet的连接,Access主要适用于中小型应用系统,或作为客户机、服务器系统的客户端数据库。
早期应用领域:小型程序系统asp+access系统,留言板,校友录等等。
6.其他不常用关系型数据库
DB2,PostgreSQL,Informix,Sybase等。这些关系型数据库逐步的淡出了普通运维的实现,特别是互联网公司几乎见不到,因此我们这里就不多介绍了。
四.非关系型数据库产品介绍。
1.Memcached(key-value)
Memcached是一个开源的,高性能的,具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJornal的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来构建自己的大负载网站或提高自己的高访问网站的响应速度。注意:Memcache是这个项目的名称,而Memchched是服务器端的主程序文件名。
缓存一般用来保存一些经常被存取的对象或数据(例如:浏览器会把经常访问的网页缓存起来一样),通过缓存来存取对象或数据要比在磁盘上存取快很多,前者是内存,后者是磁盘,Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存存在memcached的内存中,这些被缓存的数据被程序通过API的方式被存取,memcached里面的数据就像一张巨大的HASH表,数据以key-value对的方式存在,Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出速度更快的可扩展的web应用。(官方网站: http://memcached.org/)
由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的持久化存储机制和异步主辅复制机制,使Memcached具备了事物恢复能力,持久化数据存储能力和分布式复制能力,Memcached非常适合需要超高性能读写速度,持久化保存的应用场景,但是最近几年逐渐被其他的持续化产品替代例如:redis。(所以如果你想要去新浪面试话,这个东西是你和面试官必须提到的东西哟~不然你可能进不去~哈哈~)
2.redis(key-value)
Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型想对更多,包括string(字符串),list(列表),set(集合)和zset(有序集合)等。这些数据类型都支持push/pop,add/remove及取交集,并集和差集更丰富的操作,而且这些操作都是原子性的。在此基础上。redis支持各种不同方式的排序。与memcached一样。为了保证效率,redis的数据都是缓存在内存中。区别会周期性的把更新的数据写入磁盘或者把修改操作写入追加记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系型数据库起到很好的补充作用。它提供了Python.Ruby,Rrlang,PHP客户端,使用很方便.(官网: https://redis.io/documentation)
redis特点:
1>.支持内存缓存,这个功能相当于memched。
2>.支持持久化,这个功能相当于memcachedb,ttserver。
3>.数据类型更丰富。比其他key-value库功能更强。
4>.支持集群,分布式。
5>.支持队列等特殊功能。
应用:缓存从存取memcached更改存取redis.
3.MongoDB(Document-oriented)
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最想关系数据库的。他支持的数据结构非常松散,类似json和bjson格式,因此可以存储比较复杂的数据类型,Mongodb最大的特点是他支持的查询语言非常强大,其语法有类似于面向对象的查询语言,几乎可以实现类似关系数据库单标查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能,易部署,易使用,存储数据非常方便。
主要功能特性:
1>.面向集合存储,易存储对象类型的数据;
“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema),
2>.模式自由;
模式自由(schema-free),意味着对于存储在mogodb数据库中的文件,我们不需要知道他的任何结构定义。如果需要,你完全可以把不同结构的文件存储在同一个数据库里。
3>.支持动态查询;
4>.支持完全索引,包含内部对象
5>.支持查询;
6>.支持复制和故障恢复;
7>.使用高效的二进制数据存储,包括大型对象(如视频等);
8>.自动处理碎片,以支持云计算层次的扩展性;
9>.支持Ruby,Python,Jave,C++,Php等多种语言;
10>.文件存储格式为BSON(一种JSON的扩展);
BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一表示一个文档,为字符串类型,而值则可以是各种复杂的文档类型。
11>可以通过网络访问
MongoDB服务端可运行在Linux,Windows或OS X平台,支持32位和64位应用,默认端口为27017.推荐运行在64位平台。
MogoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。(官网: https://docs.mongodb.com/manual/contents/)
4.Cassandra(column-oriented)
Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据,Facebook,360目前在使用此系统。
主要特性:
1>.分布式;
2>.基于colum的结构化;
3>.高伸展性;
Cassandra的主要忒单就是他不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取,对于一个Cassandra集群来说,扩展性嫩是比较简单的事情。只管在集群里面添加节点就可以了。
Cassandra是一个混合型的非关系的数据库,类似于google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目,它是一个网社交与计算方面理想的数据库,以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心话的存储。很多方面都可以称职为Dynamo2.0(官方网站: http://www.cassandra.org/)
其他不常用的非关系型数据库:HBase,MemcacheDB,Berkeley DB,Tokyo Cabinet\Tokyo Tyrant(ttserver)
五.数据库相关知识
1.数据库发展历史大事记
1951:Univac系统使用磁带和穿孔卡片作为数据存储。
1956:IBM公司在其Model 305 RAMAC中第一次引入了 磁盘驱动器
1961: 通用电气(GE)公司的Charles Bachman开发了第一个数据库管理系统——IDS
1969: E.F. Codd发明了关系数据库。
1973:由John J.Cullinane领导Cullinane公司开发了 IDMS——一个针对IBM主机的基于网络模型的数据库。
1976:Honeywell公司推出了Multics Relational Data Store——第一个商用关系数据库产品。
1979:Oracle公司引入了第一个商用SQL 关系数据库管理系统。
1983:IBM推出了DB2数据库产品。
1985:为Procter & Gamble系统设计的第一个商务智能系统产生。
1991:W.H.“Bill” Inmon发表了”构建数据仓库”。
2.数据库产品排名
DB-Engines 发布了 2016 年 12 月份的数据库排名。
本月排名对比于11月份,前十名的排位都没有发生变化,但对比于去年,除了稳坐三甲宝座的Oracle 、MySQL 和 Microsoft SQL Server ,以及排在第六名的DB2外,其他的数据库的排名都发生了变化。其中 PostgreSQL 超越 MongoDB 成为第四, Cassandra 超越 Microsoft Access 成为第七, Redis 超越 SQLite 成为第九。而第11-20名的数据库排名几乎都发生了变化。
具体情况请看前 20 名排名情况:
六.MySQL数据库产品介绍
1.MySQL数据库介绍
MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。MySQL 完全适用于网络,用其建造的数据库可在因特网上的任何地方访问,因此,可以和网络上任何地方的任何人共享数据库。MySQL具有功能强、使用简单、管理方 便、运行速度快、可靠性高、安全保密性强等优点。MySQL用C和C++编写,它可以工作在许多平台(Unix,Linux,Windows)上,提供了 针对不同编程语言(C,C++,JAVA等)的API函数;使用核心线程实现多线程,能够很好的支持多CPU;提供事务和非事务的存储机制;快速的基于线 程的内存分配系统;MySQL采用双重许可,用户可以在GNU许可条款下以免费软件或开放源码软件的方式使用MySQL软件,也可以从MySQL AB公司获得正式的商业许可。
除了以上特点,MySQL 还有一个最大的特点,那就是在诸如 UNIX 这样的操作系统上,它是免费的,可从因特网上下载其服务器和客户机软件。并且还能从因特网上得到许多与其相配的第三方软件或工具。而在 Windows 系统上,其客户机程序和客户机程序库是免费的。
2.MariaDB数据库介绍
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
MariaDB基于 事务的Maria 存储引擎,替换了 MySQL的 MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX 存储引擎。
3.为什么选用 MySQL
如果您正在寻找一种免费的 或不昂贵的数据库管理系统,可以有几个选择,如,MySQL、mSQL、Postgres(一种免费的但不支持来自商业供应商引擎的系统)等。在将 MySQL 与其他数据库系统进行比较时,所要考虑的最重要的因素是性能、支持、特性(与 SQL 的一致性、扩展等等)、认证条件和约束条件、价格等。相比之下,MySQL 具有许多吸引人之处:
1>.速度。MySQL 运行速度很快。开发者声称 MySQL 可能是目前能得到的最快的数据库。可访问 http://www.mysql.com/benchmark.html (MySQL Web 站点上的性能比较页),调查一下这个性能。
2>.容易使用。MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低。
3>.价格。MySQL 对多数个人用户来说是免费的。
4>.小巧。4.1.1的数据库发行版仅仅只有21M,安装完成也仅仅51M。
5>.支持查询语言。MySQL 可以利用 SQL(结构化查询语言),SQL 是一种所有现代数据库系统都选用的语言。也可以利用支持 ODBC(开放式数据库连接)的应用程序,ODBC 是 Microsoft 开发的一种数据库通信协议。
6>.性能。许多客户机可同时连接到服务器。MySQL数据库没有用户数的限制,多个客户机可同时使用同一个数据库。可利用几个输入查询并查看结果的界面来交互 式地访问 MySQL。这些界面为:命令行客户机程序、Web 浏览器或 X Window System 客户机程序。此外,还有由各种语言(如C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and Tcl)编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。
7>.连接性和安全性。MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。
8>. 可移植性。MySQL 可运行在各种版本的 UNIX 以及其他非 UNIX 的系统(如 Windows 和 OS/2)上。MySQL 可运行在从家用 PC 到高级的服务器上。
9>.开放式的分发。MySQL 容易获得;只要使用 Web 浏览器即可。如果不能理解某样东西是如何起作用的,或者对某个算法感到好奇,可以将其源代码取来,对源代码进行分析。如果不喜欢某些东西,则可以更改它。
4.MySQL社区办与MySQL企业版区别
如果仅仅是从学习角度,直接使用社区版就可以了,两者没有本质区别。只有在需要官方的商业服务的时候才会看出很大区别。
主要的区别有以下两点。
1.企业版只包含稳定之后的功能,社区版包含所有Mysql的最新功能。 也就是说,社区版是企业版的测试版,但是,前者的功能要比后者多。
2.官方的支持服务只针对企业版,用户在使用社区版时出现任何问题,Mysql官方概不负责。
至于管理工具,Mysql官方提供的工具都是免费的,从官方网站都可以下载到,同样可以用在社区版的Mysql上。
七.MysSQL数据库的四种发布版本
alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。
beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。(阿里巴巴,去哪网这些公司敢用,因为他们公司内部有高手可以评估这个风险!)
rc版:全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。
GA版本:GA版是软件产品正式发布的版本,也称生产版本的产品。一般情况下。企业的生产环节都会选择GA版本的MySQL软件,用于真实的生产环境中。偶尔有个别大型企业会追求新功能驱动而牺牲稳定性使用其他版本,但这是个例。
扩展小知识:
很多软件在正式发布前都会发布一些预览版或者 测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。
alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。
beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alpha版要稳定一些。这个阶段版本的软件还会不断增加新功能。如果你是发烧友,可以下载这个版本。
rc版:全写:Release Candidate(候选版本),该版本又较beta版更进一步了,该版本功能不再增加,和最终发布版功能一样。这个版本有点像最终发行版之前的一个类似 预览版,这个的发布就标明离最终发行版不远了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。
stable版:稳定版。在开源软件中,都有stable版,这个就是开源软件的最终发行版,用户可以放心大胆的用了。
另外,对于商业软件,还有一下版本:
RTM版:全称为Release to Manufacture。工厂版。改版程序已经固定,就差工厂包装、光盘印图案等工作了。
OEM版:厂商定制版。
EVAL版:评估版。就是有30或者60天等使用期限的版本。
RTL版:Retail.(零售版),这个版本就是真正发售的版本,有漂亮的包装、光盘、说明书等东西和高昂的价格。
八.MySQL产品三条路线
第一条-5.0.xx到5.1.xx产品线系列介绍
MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布:没有增加会影响稳定性的新功能。 MySQL 5.1:Previous stable(production-quality)release MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布:没有增加会影响该系列的重要功能。
MySQL 5.0:Older stable release nearing the end of the product lifecycle
即使是最正宗的,但也很少人用了,MySQL.5.1
第二条-5.4.xx开始-到了5.7.xx产品线系列介绍
为了更好地整合MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法等,从而更好地支持SMP架构,提高性能而做了大量的代码重构,版本编号从5.4.xx开始,目前发展到了 5.6.x
MySQL 5.5:LatestGeneral Availability(Production)release
主流:互联网公司用MySQL.5.5
第三条-6.0.xx到7.1.xx产品线系列介绍
为了更好地推广MySQL Cluster版本,以及提高MySQL Cluster的性能和稳定性,以及功能改进和增加,以及改动MySQL基础功能,使其对Cluster存储引擎提供更有效的支持与优化。版本号为6.0.xx开发。目前发展到7.1.xx
九.MySQL数据库软件命名介绍
例如,像 mysql-5.7.16.tar.gz 的版本号解释:
1>. 第1个数字(5)是主版本号,描述了文件格式。所有版本5发行都有相同文件格式
2>. 第2个数字(0)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。
3>. 第3个数字(56)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本
4>. 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版.
十.MySQL版本选择最终建议
企业生产场景选择MySQL数据库建议:
1>. 稳定版:选择开源的社区版的稳定版GA版本
2>. 产品线:可以选择5.1或5.5 互联网公司主流5.5,其次是5.1和5.6
3>. 选择MySQL数据库GA版发布后6个月以上的GA版本。 (让别人先去帮你实验,等别人使用了半年左右发现稳定了再去使用,如果你不是数据库大牛的建议不要选择最新的!)
4>.要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本 (选择的时候还要看是否频繁的更新发布版本,如果每个月都更新的话说明是有问题的,建议这连续的版本都不要选择,都存在风险!)
5>.最好向后较长时间没有更新发布的版本
6>.要考虑开发人员开发程序使用的版本是否兼容你选的版本 (因为是先有程序再有公司才会请运维的,他们开发的程序以及确定好了数据库的版本啦!)
7>.作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件
8>.优先企业非核心业务采用新版本的数据库GA版本软件
9>.向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
10>.经过上述工序之后,若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库件。
十一.MySQL数据库企业生产常用5种安装方法介绍
1>.yum/rpm方式安装mysql
yum/rpm方式安装mysql安装极其简单,只要执行 yum -y install mysql-server即可。
yum/rpm安装方式安装MySQL应用场景:
适合对数据库要求不太高的场合,例如并发不大,公司内部,企业内部的一些应用场景。
大的门户网站公司他们把源码根据企业的需求制作出rpm,搭建yum仓库,yum -y install xxx
2>.源码安装mysql
此种方法适合所有的MySQL5.0.xx-5.1.xx产品系列,是最常规的编译方式。
3>.采用cmake方式编译安装MySQL
由于MySQL5.5-5.6.xx产品系列特殊性,所以编译方式也和早期的产品安装方式不同,采用cmake或gmake方式编译安装。即./cmake;make;make install,(提示:需要安装cmake软件),身材环境中的参数如下:
tar zxf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0
#-- Build files have been written to: /home/oldboy/tools/mysql-5.5.32
提示,编译时可配置的选项很多,具体可参考结尾附录或官方文档:
make
#[100%] Built target my_safe_process
make install
ln -s /application/mysql-5.5.32/ /application/mysql
如果上述操作未出现错误,则MySQL5.5.32软件cmake方式的安装就算成功了。
4>.采用二进制方式免编译安装MySQL
这种方法和yum /rpm 包安装方式类似,适合各类MySQL产品系列,不需要复杂的编译设置及编译时间的等待,直接解压下载的软件包,初始化即可完成MySQL的安装启动
5>. 如何选择MySQL的安装方式
yum/rpm方式安装MySQL适合于对数据库要求不太高的场合,例如开发不大,公司内部,企业内部的一些应用场景。
二进制免安装比较简单方便,适合5.0-5.1和5.5-5.6系列,是很多DBA的选择,普通 Linux运维人员多采用编译的方式,5.0-5.1系列就是常规编译方式,5.5-5.6系列就是cmake编译方式。
推荐:MySQL5.5及以上的版本;安装方式机器数量少的话,使用cmake编译方式;数量多的话采用二进制免安装。
十二.编译安装MySql
1 CentOS 6.x下通过yum安装的MySQL是5.1版的,用户只需要通过一条命令就可以完成数据库的安装,但是在实际生产环节中,yum安装的版本有的时候回不适合我们当下的环境,这个适合就可以自定义安装,即是我特别喜欢源码安装,他可以指定安装路径,配置我们自己需要的参数等等。源码安装是运维必回的基本要素之一。接下来跟我一起来手把手安装一下MySql吧。 2 3 一.操作环境; 4 [root@yinzhengjie ~]# cat /etc/redhat-release 5 CentOS release 6.6 (Final) 6 [root@yinzhengjie ~]# 7 [root@yinzhengjie ~]# uname -r 8 2.6.32-504.el6.x86_64 9 [root@yinzhengjie ~]# 10 11 二.检查服务器现有的数据库; 12 刚刚给宿主机重装的操作系统,为了方便我只修改了部分参数,让虚拟机自动帮我生成了一台虚拟机,里面默认是安装的有MySQL版本的,如果您的服务器是手动安装的话建议不要勾选Mysql相关的包,因为便于做实验,不过您如果勾选了的话也没有太大关系。我们可以手动将其卸载。 13 [root@yinzhengjie ~]# rpm -qa | grep mysql #找到相应的软件包名 14 mysql-libs-5.1.73-3.el6_5.x86_64 15 [root@yinzhengjie ~]# 16 [root@yinzhengjie ~]# rpm -e --nodeps mysql-libs-5.1.73-3.el6_5.x86_64 #讲找到的包名强行卸载 17 [root@yinzhengjie ~]# 18 [root@yinzhengjie ~]# rpm -qa | grep mysql #检查是否成功卸载 19 [root@yinzhengjie ~]# 20 21 三.安装MySQL 22 1.安装编译代码需要的安装包; 23 [root@yinzhengjie ~]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel 24 [root@yinzhengjie ~]# echo $? #查看上条命令是否正确执行结束。 25 0 26 [root@yinzhengjie ~]# 27 28 2.下载MySQL安装包 29 安装包我已经下载好了:链接:http://pan.baidu.com/s/1geG3nbX 密码:40ie 30 [root@yinzhengjie ~]# mkdir -pv /home/yinzhengjie/tools 31 [root@yinzhengjie ~]# cd /home/yinzhengjie/tools/ 32 [root@yinzhengjie tools]# 33 [root@yinzhengjie tools]# yum -y install lrzsz #用“rz”命令讲软件包上传至该目录 34 35 3.解压安装包 36 [root@yinzhengjie tools]# ll 37 total 35164 38 -rw-r--r--. 1 root root 36005278 Jul 11 07:37 mysql-5.6.14.tar.gz 39 [root@yinzhengjie tools]# 40 [root@yinzhengjie tools]# tar xf mysql-5.6.14.tar.gz -C /home/yinzhengjie/tools 41 [root@yinzhengjie tools]# ll 42 total 35168 43 drwxr-xr-x. 33 7161 wheel 4096 Sep 10 2013 mysql-5.6.14 44 -rw-r--r--. 1 root root 36005278 Jul 11 07:37 mysql-5.6.14.tar.gz 45 [root@yinzhengjie tools]# 46 47 4.cmake安装MySQL 48 整个过程可能要花费10分钟左右,可以适当的把您的虚拟机配置调高一点,这样相对来说会比较节省时间。 49 [root@yinzhengjie tools]# cd mysql-5.6.14 50 [root@yinzhengjie mysql-5.6.14]# cmake \ 51 > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ 52 > -DMYSQL_DATADIR=/usr/local/mysql/data \ 53 > -DSYSCONFDIR=/etc \ 54 > -DWITH_MYISAM_STORAGE_ENGINE=1 \ 55 > -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 56 > -DWITH_MEMORY_STORAGE_ENGINE=1 \ 57 > -DWITH_READLINE=1 \ 58 > -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \ 59 > -DMYSQL_TCP_PORT=3306 \ 60 > -DENABLED_LOCAL_INFILE=1 \ 61 > -DWITH_PARTITION_STORAGE_ENGINE=1 \ 62 > -DEXTRA_CHARSETS=all \ 63 > -DDEFAULT_CHARSET=utf8 \ 64 > -DDEFAULT_COLLATION=utf8_general_ci 65 [root@yinzhengjie mysql-5.6.14]# echo $? 66 0 67 [root@yinzhengjie mysql-5.6.14]# make -j 4 && make install 68 [ 1%] Built target zlib 69 [ 1%] Built target INFO_SRC 70 [ 3%] Built target taocrypt 71 [ 4%] Built target yassl 72 [ 5%] [ 6%] Built target edit 73 Built target INFO_BIN 74 [ 6%] Built target gen_lex_hash 75 [ 6%] Built target regex 76 [ 10%] Built target strings 77 [ 11%] Built target vio 78 [ 11%] Built target mysqlservices 79 [ 11%] Built target my_safe_process 80 [ 11%] Built target comp_sql 81 [ 11%] Built target GenServerSource 82 [root@yinzhengjie mysql-5.6.14]# echo $? 83 0 84 [root@yinzhengjie mysql-5.6.14]# 85 86 四.配置MySQL 87 1.创建MySQL账户 88 [root@yinzhengjie ~]# cat /etc/passwd | grep mysql 89 [root@yinzhengjie ~]# cat /etc/group | grep mysql 90 [root@yinzhengjie ~]# useradd mysql 91 [root@yinzhengjie ~]# cat /etc/group | grep mysql 92 mysql:x:501: 93 [root@yinzhengjie ~]# cat /etc/passwd | grep mysql 94 mysql:x:501:501::/home/mysql:/bin/bash 95 [root@yinzhengjie ~]# 96 97 2.修改MySQL目录权限 98 [root@yinzhengjie ~]# ll /usr/local/mysql/ 99 total 156 100 drwxr-xr-x. 2 root root 4096 Jul 11 15:59 bin 101 -rw-r--r--. 1 root root 17987 Sep 10 2013 COPYING 102 drwxr-xr-x. 3 root root 4096 Jul 11 15:58 data 103 drwxr-xr-x. 2 root root 4096 Jul 11 15:58 docs 104 drwxr-xr-x. 3 root root 4096 Jul 11 15:58 include 105 -rw-r--r--. 1 root root 88388 Sep 10 2013 INSTALL-BINARY 106 drwxr-xr-x. 3 root root 4096 Jul 11 15:58 lib 107 drwxr-xr-x. 4 root root 4096 Jul 11 15:59 man 108 drwxr-xr-x. 10 root root 4096 Jul 11 15:59 mysql-test 109 -rw-r--r--. 1 root root 2496 Sep 10 2013 README 110 drwxr-xr-x. 2 root root 4096 Jul 11 15:59 scripts 111 drwxr-xr-x. 28 root root 4096 Jul 11 15:59 share 112 drwxr-xr-x. 4 root root 4096 Jul 11 15:59 sql-bench 113 drwxr-xr-x. 3 root root 4096 Jul 11 15:59 support-files 114 [root@yinzhengjie ~]# chown -R mysql:mysql /usr/local/mysql/ 115 [root@yinzhengjie ~]# ll /usr/local/mysql/ 116 total 156 117 drwxr-xr-x. 2 mysql mysql 4096 Jul 11 15:59 bin 118 -rw-r--r--. 1 mysql mysql 17987 Sep 10 2013 COPYING 119 drwxr-xr-x. 3 mysql mysql 4096 Jul 11 15:58 data 120 drwxr-xr-x. 2 mysql mysql 4096 Jul 11 15:58 docs 121 drwxr-xr-x. 3 mysql mysql 4096 Jul 11 15:58 include 122 -rw-r--r--. 1 mysql mysql 88388 Sep 10 2013 INSTALL-BINARY 123 drwxr-xr-x. 3 mysql mysql 4096 Jul 11 15:58 lib 124 drwxr-xr-x. 4 mysql mysql 4096 Jul 11 15:59 man 125 drwxr-xr-x. 10 mysql mysql 4096 Jul 11 15:59 mysql-test 126 -rw-r--r--. 1 mysql mysql 2496 Sep 10 2013 README 127 drwxr-xr-x. 2 mysql mysql 4096 Jul 11 15:59 scripts 128 drwxr-xr-x. 28 mysql mysql 4096 Jul 11 15:59 share 129 drwxr-xr-x. 4 mysql mysql 4096 Jul 11 15:59 sql-bench 130 drwxr-xr-x. 3 mysql mysql 4096 Jul 11 15:59 support-files 131 [root@yinzhengjie ~]# 132 [root@yinzhengjie ~]# chmod -R 1777 /tmp/ #调整/tmp权限,否则初始化会出错。 133 134 3.初始化配置 135 [root@yinzhengjie ~]# cd /usr/local/mysql/ 136 [root@yinzhengjie mysql]# scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql #指定数据库的安装目录和存放数据的目录。 137 [root@yinzhengjie mysql]# echo $? 138 0 139 [root@yinzhengjie mysql]# 140 141 4.启动MySQL 142 [root@yinzhengjie mysql]# cp support-files/mysql.server /etc/init.d/mysql #将启动脚本移动到系统环境变量下。 143 [root@yinzhengjie mysql]# chmod +x /etc/init.d/mysql 144 [root@yinzhengjie mysql]# chkconfig mysql on #让其开机自启 145 [root@yinzhengjie mysql]# service mysql start #启动MySQL服务 146 Starting MySQL.. SUCCESS! 147 [root@yinzhengjie mysql]# 148 [root@yinzhengjie mysql]# lsof -i :3306 #检查服务是否启动成功。 149 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 150 mysqld 63150 mysql 10u IPv6 165718 0t0 TCP *:mysql (LISTEN) 151 [root@yinzhengjie mysql]# 152 153 5.配置环境变量 154 [root@yinzhengjie ~]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile 155 [root@yinzhengjie ~]# echo "export PATH" >> /etc/profile 156 [root@yinzhengjie ~]# source /etc/profile 157 158 6.初始化管理员密码以及远程管理 159 [root@yinzhengjie ~]# mysql -uroot 160 Welcome to the MySQL monitor. Commands end with ; or \g. 161 Your MySQL connection id is 1 162 Server version: 5.6.14 Source distribution 163 164 Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 165 166 Oracle is a registered trademark of Oracle Corporation and/or its 167 affiliates. Other names may be trademarks of their respective 168 owners. 169 170 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 171 172 mysql> SET PASSWORD = PASSWORD('yinzhengjie'); 173 Query OK, 0 rows affected (0.01 sec) 174 175 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%' IDENTIFIED BY 'yinzhengjie' WITH GRANT OPTION; #这个是授权root用户可以用192.168.0.0网段远程登录密码是“yinzhengjie” 176 Query OK, 0 rows affected (0.00 sec) 177 178 mysql> quit 179 Bye 180 [root@yinzhengjie ~]#