
1.3 什么是MySQL
MySQL是一个小型关系数据库管理系统,与其他大型数据库管理系统(例如Oracle、DB2、SQL Server等)相比,MySQL规模小、功能有限,但是它体积小、速度快、成本低,且提供的功能对稍微复杂的应用来说已经够用,这些特性使得MySQL成为世界上最受欢迎的开放源代码数据库。本节将介绍MySQL的特点。
1.3.1 客户机-服务器软件
主从式架构(Client-Server Model)或客户端-服务器(Client/Server)结构简称C/S结构,是一种网络架构,通常在该网络架构下,软件分为客户端(Client)和服务器(Server)。
服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在客户端/服务器结构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据的传输量。
用户使用应用程序时,首先启动客户端通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。
这种系统的特点是,客户端和服务器程序不在同一台计算机上运行,这些客户端和服务器程序通常归属不同的计算机。
主从式架构通过不同的途径应用于很多不同类型的应用程序,比如,现在人们熟悉的在因特网上使用的网页。例如,当顾客想要在当当网上买书的时候,电脑和网页浏览器就被当作一个客户端,同时,组成当当网的电脑、数据库和应用程序被当作服务器。当顾客的网页浏览器向当当网请求搜寻数据库相关的图书时,当当网服务器从其数据库中找出所有该类型的图书信息,结合成一个网页,再发送给顾客的浏览器。服务器端一般使用高性能的计算机,并配合使用不同类型的数据库,比如Oracle、Sybase、MySQL等;客户端需要安装专门的软件,比如专门开发的客户端工具浏览器等。
1.3.2 MySQL版本
针对不同用户,MySQL分为两个不同的版本。
·MySQL Community Server(社区版):该版本完全免费,但是官方不提供技术支持。
·MySQL Enterprise Server(企业版服务器):它能够以很高性价比为企业提供数据仓库应用,支持ACID事物处理,提供完整的提交、回滚、崩溃恢复和行级锁定功能。但是该版本需付费使用,官方提供电话技术支持。
提示
MySQL Cluster主要用于架设集群服务器,需要在社区版或企业版的基础上使用。
MySQL的命名机制由3个数字和1个后缀组成,例如MySQL-5.7.22。
(1)第1个数字(5)是主版本号,描述了文件格式,所有版本5的发行版都有相同的文件格式。
(2)第2个数字(7)是发行级别,主版本号和发行级别组合在一起便构成了发行序列号。
(3)第3个数字(22)是此发行系列的版本号,随每次新分发版本递增。通常选择已经发行的最新版本。
在MySQL开发过程中,同时存在多个发布系列,每个系列的成熟度处在不同阶段。
(1)MySQL 5.7是最新开发的稳定(GA)发布系列,是将执行新功能的系列,目前已经可以正常使用。
(2)MySQL 5.6是比较稳定(GA)发布系列,只针对漏洞修复重新发布,没有增加会影响稳定性的新功能。
(3)MySQL 5.1是前一稳定(产品质量)发布系列,只针对严重漏洞修复和安全修复重新发布,没有增加会影响该系列的重要功能。
提示
对于MySQL 4.1、4.0和3.23等低于5.0的老版本,官方将不再提供支持。而所有发布的MySQL(Current Generally Available Release)版本已经经过严格标准的测试,可以保证其安全可靠地使用。针对不同的操作系统,读者可以在MySQL官方下载页面(http://dev.mysql.com/downloads/)下载相应的安装文件。
1.3.3 MySQL的优势
MySQL的主要优势如下:
(1)速度:运行速度快。
(2)价格:MySQL对多数个人来说是免费的。
(3)容易使用:与其他大型数据库的设置和管理相比,其复杂程度较低,易于学习。
(4)可移植性:能够工作在众多不同的系统平台上,例如Windows、Linux、UNIX、Mac OS等。
(5)丰富的接口:提供了用于C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等语言的API。
(6)支持查询语言:MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序。
(7)安全性和连接性:十分灵活和安全的权限和密码系统,允许基于主机的验证。连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。并且由于MySQL是网络化的,因此可以在因特网上的任何地方访问,提高数据共享的效率。
1.3.4 了解MySQL 5.7的新特性
和MySQL 5.6相比,MySQL 5.7的新功能主要包括以下几个方面。
1.性能大幅度提升
MySQL 5.7在所有负载模型上都有显著的性能改进,并创造了新的基准测试纪录。MySQL 5.7在Point Select查询测试中,测试成绩是MySQL 5.6的3倍多。
2.支持JSON
JSON(JavaScript Object Notation)是一种存储信息的格式,可以很好地替代XML。从MySQL 5.7将支持JSON,而在此版本之前,只能通过strings之类的通用形式来存储JSON文件,这样做的缺陷很明显,就是必须要自行确认和解析数据、解决更新中的困难或在执行插入操作时忍受较慢的速度。
在MySQL 5.7中,新增了一种新的数据类型,用来在MySQL的表中存储JSON格式的数据。原生支持JSON数据类型主要有如下好处:
(1)文档校验:只有符合JSON规范的数据段才能被写入类型为JSON的列中,相当于有了自动JSON语法校验。
(2)高效访问:在JSON类型的列中存储JSON文档时,数据不会被视为纯文本进行存储,而是以一种优化后的二进制格式进行存储,以便可以更快速地访问其对象成员和数组元素。
(3)提升性能:通过在JSON类型的列上创建索引,可以提升数据查询性能。
3.Performance Schema
对于任何数据管理系统而言,监控是必要的。MySQL提供的核心监控策略是Performance Schema。Performance Schema在MySQL 5.7中的改进包括大量新加入的监控项、降低占用空间和负载、通过新的SYS Schema机制显著地提升易用性。
在监控方面,Performance Schema提供了如下新功能:
(1)元数据锁(Metadata Locking):任何已经开始的事务将一直持有表的元数据锁直到事务提交。由于开始的事务会持有事务关联的所有表的元数据锁,因此任何DDL操作在前面的事务提交前是不能够执行的。
(2)进度跟踪(Stage Tracking):长时间跟踪操作的进度。
(3)事务:监控服务层和存储引擎层的事务的全部方面。
(4)内存使用:通过统计内存使用的信息,从而了解内存的消耗情况。
(5)预编译语句:通过预编译语句提供聚合统计信息,并且展示服务使用的预编译语句。
4.SYS Schema
MySQL SYS Schema是一个由一系列对象(视图、存储过程、存储方法、表和触发器)组成的数据Schema,主要存储在Performance Schema和INFORMATION_SCHEMA的监测数据资源中。MySQL SYS Schema默认包含在MySQL 5.7中,并提供摘要视图以解决以下问题:
(1)哪些进程占用了数据库的所有资源?
(2)哪些主机对数据库服务器的访问量最大?
(3)数据库实例上的内存都被用到了什么地方?
5.性能和可扩展性
改进InnoDB的可扩展性和临时表的性能,从而实现更快的网络和大数据加载等操作。
6.改进复制以提高可用性的性能
包括多源复制、增强多从线程功能、在线GTIDs和增强的半同步复制。
7.性能模式提供更好的视角
增加了许多新的监控功能,以减少空间和过载,使用新的SYS模式显著提高易用性。
8.提高安全
以安全第一为宗旨,提供了很多新的功能,从而保证数据库的安全。
9.优化
重写了大部分解析器、优化器和成本模型,提高了可维护性、可扩展性和性能。
10.透明的页级别压缩
自MySQL 5.1开始,InnoDB支持表压缩特性。InnoDB页级别的压缩是MySQL 5.7的一个新特性,它补充了InnoDB的表级压缩,它们可以在同一个服务实例上并存。用户现在可以选择最适合他们使用场景的压缩方式,甚至基于不同的表选择不同的压缩方式。
对于压缩算法,目前支持Zlib和LZ4。当一个页被写入时,它就被指定的压缩算法压缩。压缩后的数据写到磁盘上,随后“hole punching”机制会在页的末尾处释放空块。如果压缩失败,数据则被原样写入。
InnoDB现在也支持32KB和64KB的页大小设置,这对于页级的压缩来说是一个很好的补充。一般来说,更大的页通常会增加冗余的数据量。MySQL 5.7增加了用户可配置填充因子和页合并抑制的新特性,这样可以让InnoDB更好地使用存储空间。
11.本地分区
在早期版本中,对InnoDB分区的支持依赖于ha_partition处理器,这个处理器可以为每一个分区创建一个新的处理器,当使用很多分区时,这个处理器也相应地浪费了很多资源。
在MySQL 5.7 InnoDB中包含对本地分区的支持,可以使用更少的整体资源。InnoDB的本地分区也为较好地整体分区铺平了道路。这包含并行查询进程、改进分区裁剪、外键支持、全局二级索引和在分区表上的全文本搜索之类的功能。作为这项工作的一部分,也已经从分区处理器类中的特性部分分离出了它自己的分区接口。InnoDB本地分区功能可以明显降低负载,减少多达90%的内存需求。
12.缓存保留
在MySQL 5.7服务器重启时,InnoDB自动保留缓存池中最热的25%的数据。这样的好处是,用户不需要任何预加载或预热数据缓存的工作,也不需要承担MySQL重启带来的性能损失。