5.1 MySQL简介
MySQL是一款单进程多线程、支持多用户、基于客户机/服务器(Client/Server,C/S)的关系数据库管理系统。它是开源软件(所谓的开源软件是指该类软件的源代码可被用户任意获取,并且这类软件的使用、修改和再发行的权利都不受限制。开源的主要目的是为了提升程序本身的质量。),可以从MySQL的官方网站(http://www.mysql.com/)下载该软件。MySQL以快速、便捷和易用为发展主要目标。
1.MySQL的优势
1)成本低:开放源代码,任何人都可以修改MySQL数据库的缺陷;社区版本可以免费使用。
2)性能良:执行速度快,功能强大。
3)值得信赖:比如YAHOO、Google、YouTube、百度等众多公司在使用MySQL,Oracle公司接手顺应市场潮流和用户需求,会全力打造完美MySQL。
4)操作简单:安装方便快捷,有多个图形客户端管理工具(MySQL Workbench/Navicat、MySQLFront、SQLyog等客户端)和一些集成开发环境。
5)兼容性好:可安装于Windows、UNIX、Linux等多种操作系统,跨平台性好,不存在32位和64位机的不兼容无法安装的问题。
MySQL从无到有,技术不断更新,版本不断升级,与其他的大型数据库(比如Oracle、DB2等)相比,虽然存在规模小、功能有限等方面的不足,但这丝毫不会影响它的受欢迎程度。
2.MySQL的系统特性
MySQL数据库管理系统具有以下一些系统特性。
1)使用C和C++语言编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
2)支持多线程,可充分利用CPU资源。
3)优化的SQL查询算法,能有效地提高查询速度。
4)提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
5)支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、Open BSD、OS/2 Wrap、Solaris、Windows等多种操作系统平台。
6)既能够作为一个单独的应用程序应用在C/S网络环境中,也能够作为一个库嵌入到其他的软件中。
7)支持大型的数据库,可以处理拥有上千万条记录的大型数据库,数据类型丰富。
8)支持多种存储引擎。
3.MySQL发行版本
根据操作系统的类型来划分,MySQL数据库大体上可以分为Windows版、UNIX版、Linux版和Mac OS版。
根据MySQL数据库的开发情况,可将其分为Alpha、Beta、Gamma和Generally Available(GA)等版本。
● Alpha:处于开发阶段的版本,可能会增加新的功能或进行重大修改。
● Beta:处理测试阶段的版本,开发已经基本完成,但是没有进行全面的测试。
● Gamma:该版本是发行过一段时间的Beta版,比Beta版要稳定一些。
● Generally Available:该版本已经足够稳定,可以在软件开发中应用了。有些资料会将该版本称为Production版。
MySQL数据库根据用户群体的不同,分为社区版(Community Edition)和企业版(Enterprise)。
MySQL软件对于普通用户是免费开源(选择GPL许可协议)的,通常称之为社区版;对于商业用户采取收费(非GP L许可)的方式。
社区版和商业版之间的区别:商业版可享受到MySQL AB公司的技术服务;社区版没有官方的技术支持,但可以通过官网论坛提问找到解决方案。两者在功能上是相同的。
4.MySQL 5.7新增亮点
MySQL数据库凭借其易用性、扩展力和性能等优势,成为全世界最受欢迎的开源数据库。世界上许多流量大的网站都依托MySQL数据库来支持其业务关键的应用程序,其中包括Facebook、Google、Ticketmaster和eBay。MySQL 5.7在原来版本的基础上改进并新增了许多特性。以下从4个方面简单介绍了MySQL 5.7数据库中的亮点功能。
1)通过提升MySQL优化诊断来提供更好的查询执行时间和诊断功能。
2)通过增强InnoDB存储引擎来提高性能处理量和应用可用性。
3)通过MySQL复制的新功能以提高扩展性和高可用性。
4)增强的性能架构(Performance Schema)。
5.MySQL字符集
字符集就是指符号和字符编码的集合。
6.MySQL的体系结构
MySQL的体系结构组成包括连接池组件、管理服务和工作组件、SQL接口组件、查询分析组件、优化器组件、缓存组件、插件式存储引擎以及物理文件。MySQL体系结构如图5-1所示。
1)Connectors:指的是不同语言中与SQL的交互。
图5-1 MySQL体系结构图
2)Management Services&Utilities:系统管理和控制工具。
3)Connection Pool:连接池。管理用户连接,线程处理等需要缓存的需求。
4)SQL Interface:SQL接口。接受用户的SQL命令,并且返回用户需要查询的结果。比如select语句就是调用SQL Interface。
5)Parser:解析器。SQL命令传递到解析器的时候会被解析器验证和解析。
6)Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。它使用的是“选取-投影-连接”策略进行查询。
7)Cache和Buffer:查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存、记录缓存、key缓存、权限缓存等。
8)Pluggable Storage Engine:插件式存储引擎。存储引擎是MySQL中具体的与文件打交道的子系统。它根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫作存储引擎)。
9)File System:InnoDB默认的表空间文件为ibdata1,可通过show variables like‘innodb_file_per_table’查看每个表是否产生单独的.idb表空间文件。但是,单独的表空间文件仅存储该表的数据、索引和插入缓冲等信息,其余信息还是存放在默认的表空间中。
10)Files & Logs:实例和介质失败时,重做日志文件就能派上用场,如数据库掉电,InnoDB存储引擎会使用重做日志恢复到掉电前的时刻,以此来保证数据的完整性。参数innodb_log_file_size指定了重做日志文件的大小;innodb_log_file_in_group指定了日志文件组中重做日志文件的数量,默认为2,innodb_mirrored_log_groups指定了日志镜像文件组的数量,默认为1,代表只有一个日志文件组,没有镜像;innodb_log_group_home_dir指定了日志文件组所在路径,默认在数据库路径下。