【信息化】MySQL数据库简介

1

什么是数据库?

简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。

2

数据库的种类

早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库。

3

关系型数据库介绍

关系型数据库由来

网络数据库和层次数据库很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。

用户对这两种数据库进行存取时,依然需要明确数据的存储结构,支出存储路径。而关系数据库就可以较好地解决这些问题。

关系型数据库介绍

关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。
Oracle 在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购。(MySQL 互联网市场 ,Oracle 传统企业)。

4

什么是关系型数据库

  • Mysql和Oracle数据库,互联网运维最常用的是MySQL
  • 通过SQL结构化查询语句存储数据
  • 保持数据一致性方面很强,ACID理论

5

非关系型数据库诞生背景

非关系型数据库也被成为NoSQL数据库,NOSQL的本意是“Not Olnly SQL”
指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定非关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
随着互联网Web2.0网站的星期,传统的关系型数据库在应付web2,0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。
例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NOSQL(非关系型)类的数据就是在这样的情景下诞生并得到了非常迅速的发展。

高性能、高并发、对数据一致性要求不高
开源的NoSQL体系,如Facebook的Cassandra,Apache的HBase,也得到了广泛认同,Redis,mongb也逐渐越来越受到各类大中小型公司的欢迎和追捧 。

NOSQL非关系型数据库小结: 
1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充
2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能
3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库)

6

非关系型数据库种类

(1)键值(Key-Value)存储数据库

k1—>数据
k2—>数据
键值数据库就类似传统语言中使用哈希表,可以通过key来添加、查询或删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性

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

典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB 

(2)列存储(Column-oriedted)数据库 ======>了解即可,一般公司用不到

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

这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。

典型产品:Cassandra,HBase 

(3)面向文档(Document-Oriented)数据库

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

典型产品:MorgoDB、CouchDB 

7

常用关系型数据库产品介绍

1

oracle数据库

Oracle前身叫SDL、由Larry Ellison和两个变成任意在1977创办,他们开发了主机的拳头产品,在市场上大量销售。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二。
Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。主要应用范围:传统大企业、大公司、政府、金融、证券等。

版本升级:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c

02

MySQL数据库

MySQL被广泛的应用在Internet上的大中小型网站中。由于体积小、速度快、总体拥有成本低,开放源代码。

03

MariaDB数据库

MariaDB数据库管理系统是MySQL数据库的一个分支,主要由开元社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的潜在风险,因此MySQL开元社区采用分支的方式来避开这个风险。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎,它使用了Percona的XtraDB(InnoDB的变体)这个版本还包括了PrimeBase XT (PBXT)和Federated X存储引擎。

04

Access数据库

Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业应用。
Access不是数据库语言,只是一个数据库程序,目前最新版本为Office 2007,其特点主要如下:
(1)完善地管理各种数据库对象,具有强大的数据组织,用户管理、安全检查等功能。
(2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户管理系统具有传统的XSASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器。(Ckient/Server)结构和响应的数据库安全机制,Access具备了许多先进的大型数据管理管理系统所具备的特征。
(3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表
(4)作为Office套件的一部分,可以与Office集成,实现无缝连接
(5)能够利用Web检索和发布数据,实现与Internet的连接,Access主要适用于中小企业应用系统,或作为客户机/服务器系统中的客户端数据库。

05

SQL Server数据库

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

其他不常用关系型数据库

DB2,PostgreSQL,Informix,Sybase等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到。

8

常用非关系型数据库产品介绍

memcached(key-value)

Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache 是这个项目的名称,而Memcached是服务端的主程序文件名。

缓存一般用来保存一些进程被存取的对象或数据,通过缓存来存取对象或数据要比在磁盘上存取块很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,Memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。

Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的Web应用。

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

Memcached小结: 
1、key-value行数据库
2、纯内存数据库
3、持久化memcachedb(sina)

Redis(key-value)

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

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

官方:http://www.redis.io/documentation
redis特点:
1)支持内存缓存,这个功能相当于memcached
2)支持持久化存储,这个功能相当于memcachedb,ttserver
3)数据库类型更丰富。比其他key-value库功能更强
4)支持主从集群、分布式
5)支持队列等特殊功能
应用:缓存从存取memcached更改存取redis

MongoDB(Document-oriented)

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

特点:
高性能、易部署、易使用、存储数据非常方便 
主要功能特性: 

  1. 面向集合存储,易存储对象类型的数据
  2. “面向集合”(Collenction-Orented)意思是数据库被分组存储在数据集中,被称为一个集合(Collenction)每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档,集合的概念类似关系型数据库(RDBMS)里的表(table)不同的是它不需要定义任何模式(schema)
  3. 模式自由
  4. 模式自由(schema-free)意为着存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。
  5. 支持动态查询
  6. 支持完全索引,包含内部对象
  7. 支持查询
  8. 支持复制和故障恢复
  9. 使用高效的二进制数据存储,包括大型对象
  10. 自动处理碎片、以支持云计算层次的扩展性

Cassandra(Column-oriented)

Apache Cassndra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。
主要特点: 

  1. 分布式
  2. 基于column的结构化
  3. 高伸展性
  4. Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作。也会被路由到某个节点上面去读取。

Cassandir是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomie(分布式的key-value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目。

其他不常用非关系型数据库

HBase、MemcacheDB、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver) ttserver 持久化输出,缺点存储2千万条 性能下降(由日本人发明)

9

MySQL数据库介绍

MySQL是互联网领域里一款最要的,深受广大用户欢迎的开源关系型数据库软件之一、由瑞典MySQL AB公司开发与维护。2006年。MySQL AB公司被SUN公司收购,2008年,SUN公司又被传统数据数据库领域大佬甲骨文(oracle)公司收购,因此,MySQL数据库软件目前属于Oracle公司,成为传统数据库领域老大的又一个数据库产品,甲骨文公司收购MySQL后,使得自身在商业数据库与开源软件领域市场占有份额都跃居第一的位置,这样的格局,引起了很多人的担忧,这种担忧直接导致后来的Mysql分支数据库MariaDB的诞生于发展。

MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,在将这些表放入不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,灵活性和可管理型也得到了很大提高,访问以及管理MySQL数据库的最常用标准化语言为SQL结构化查询语句

为什么选择MySQL数据库

原因可能有以下几点: 
(1) MySQL性能卓越、服务稳定,很少出现异常宕机
(2) MySQL开放源代码且无版权制约,自主性及使用成本低
(3) MySQL历史悠久,社区及用户活跃,遇到问题可以解决
(4) MySQL软件体积小,安装使用简单,并且易于文虎,安装及维护成本低
(5) MySQL品牌口碑效应,使得企业无需考虑就直接用,LAMP、LEMP流行架构
(6) MySQL支持多用操作系统,提供多种API接口,支持多用开发语言,特别对流行的PHP语言有很好的支持

MySQL数据库分类与版本升级

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

10

MySQL数据库商业版与社区办区别

MySQL商业版与社区办之间的区别在于: 1、商业版本组织管理与测试环节控制更严格,稳定性方面,会比社区版本更稳定 2、MySQL是成熟产品,商业版与社区办之间性能方面相差不大 3、商业版不遵守GPL协议,社区版遵守GPL协议可以免费试用 4、使用商业版后可以购买相关的服务,享受7*24小时技术支持以及及时打补丁等服务,但是用户必须为此支持服务费用 5、社区版本的维护服务只能靠社区提供,无法像商业版本获得故障及补丁解决服务了,但是社区版是完全免费的方式,社区版的服务质量与时效性等方面就无法与MySQL AB公司提供的服务相比了。

11

MySQL数据库四种发布版本介绍

(1)Alpha版
        Alpha版一般只在开发的公司内部运行,不对外公开 
(2)Beta版
        Beta版一般是完成功能的开发与所有的测试工作之后的产品,不会存在较大的功能或性能BUG,并且邀请或提供给用户体验与测试,以便更全面地测试软件的问题。 
(3)RC版
        RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta版本测试结果,收集到的BUG或缺陷之处等收集到的信息,进行修复和完善之后的一版产品 
(4)GA版
        GA版是软件产品正式发布的版本,也称生产版本的产品

12

MySQL产品路线

为了提高MySQL产品的竞争优势,以及提高性能,降低开发维护成本等原因。同时方便企业用户更精准的选择适合的版本用于主机的企业生产环境中,

MySQL在发展到5.1版本系列之后,重新规划为三条产品线

第一条-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

第二条-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
http://dev.mysql.com/downloads/mysql
官方地址提供数据库下载版本:
http://mysql.ntu.edu.tw/Downloads
现在国内的镜像站也支持下载:
http://mirrors.sohu.com/mysql/ 

13

MySQL数据库软件命名介绍

MySQL数据库软件的名字是由3个数字和一个后缀组成的版本号。

例如,像mysql-5.0.56.tar.gz的版本号解释:

(1) 第1个数字(5)是主版本号,描述了文件格式。所有版本5发行都有相同文件格式
(2) 第2个数字(0)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。
(3) 第3个数字(56)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本 。
(4) 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版

14

企业生产场景选择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或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库软件。

11)<p style=”margin-top: 10px; font-size: 15px; font-family: Helvetica, ‘Hiragino Sans GB’, 微软雅黑, ‘Microsoft YaHei UI’, SimSun, SimHei, arial, sans-serif; line-height: 24px;”>yum/rpm安装适合对数据库要求不太高的场合,例如并发布大,公司内部,企业内部的一些应用场景。大的门户把源码根据企业需求制作成rpm,搭建rpm仓库。

15

MySQL体系结构

1、MySQL安装必需的体系结构组件:

MySQL服务器,客户机程序以及MySQL非客户机程序;中央程序充当服务器,客户机程序连接到该服务器以发出数据请求。

2、MySQL客户机/服务器通信并不仅限于所有计算机都运行同一操作系统的环境。客户机程序可以连接到在相同主机或不同主机上运行的服务器;客户机/服务器通信可以发生在计算机运行不同操作系统的环境中。

16

MySQL客户机程序

1、mysql/mysqldump客户机程序是使用最多的一个客户端工具;

2、MySQL Workbench是一款GUI工具,可以用来:为数据库建模;执行数据库查询;执行管理任务。

17

MySQL服务器

1、服务器和主机之间的概念差别:

服务器:一个软件程序(mysqld),具有版本号和一系列功能;

主机:服务器程序在其上运行的物理计算机,其中包含:硬件配置、操作系统、网络地址

2、多个mysqld实例可同时在一台主机上运行;

18

MySQL服务器进程

1、应用程序主要是mysqld进程来访问数据库服务器,由mysqld来操作不同的存储引擎(磁盘:InnoDB,MyISAM;内存:Memory;网络:NDB);

2、mysqld(服务器程序)进程可以划分为以下三个层:

– 连接层:处理连接,此层存在于所有服务器软件(Web/邮件/LDAP服务器)上;

– SQL层:处理所连接的应用程序发送的SQL查询;

– 存储层:处理数据存储,数据可以按不同格式和结构存储在不同物理介质上

18.1

MySQL服务器进程——连接层

1、连接层可通过多种通信协议接受来自应用程序的连接:

– TCP/IP;

– UNIX套接字;

– 共享内存;

– 命名管道;

2、其中TCP/IP适用于整个网络,也是最常用的连接方式;客户机和服务器在同一台计算机上运行时,上面列出的其他协议仅支持本地连接;

3、此层针对每个连接维护一个线程,此线程处理查询执行;在某个连接可以开始发送SQL查询之前,将会通过验证用户名+口令+客户机主机来对该连接进行验证;

通信协议:

1、TCP/IP(传输控制协议/Internet协议,Transmission Control Protocol/Internet Protocol):该通信协议套件用于连接Internet上的主机;在Linux操作系统中,TCP/IP是内置的,供 Internet使用,从而使其成为通过网络传输数据的标准;这也是适用于Windows的最佳连接类型;

2、UNIX套接字:一种进程间通信形式,用于在同一台计算机上的进程之间形成双向 通信链路的一端;套接字需要本地系统上的物理文件,这是适用于Linux的最佳连接类型;

3、共享内存:一种在程序之间传递数据的有效方式;一个程序创建其他进程(如果允许)可以访问的内存部分;此Windows显式“被动”模式仅适用于单台(Windows)计算机;默认情况下,共享内存处于禁用状态,要启用共享内存连接,必须使用–shared-memory选项启动服务器;

4、命名管道:命名管道的使用偏向于客户机/服务器通信,其工作方式与套接字非常相似;命名管道支持读/写操作,以及服务器应用程序的显式“被动”模式;此协议仅适用于单台(Windows)计算机;默认情况下,命名管道处于禁用状态,要启用命名管道连接,必须使用–enable-named-pipe选项启动服务器;

18.2

MySQL服务器进程——SQL层

1、解析器:解析器验证语法是否正确;

2、授权:验证是否允许所连接的用户运行特定查询;

3、优化器:创建每个查询的执行计划,这是有关如何以最优化的方式执行查询的分步指令集,确定要使用哪些索引以及采用何种顺序处理表是此步骤的最重要部分;

4、查询执行:完成每个查询的执行计划;

5、查询高速缓存:(可选)可配置的查询高速缓存,可用于存储(并立即返回)执行的查询和结果;

6、查询日志记录:可以启用以跟踪执行的查询;

SQL语句处理:

第一次的选择主要是查看是否有配置开启[高速缓存查询]的特性;

18.3

MySQL服务器进程——存储层

1、通过MySQL,可以使用称为“存储引擎”的不同类型的存储,数据可以存储在磁盘,内存和网络中;

2、数据库中的每个表可以使用任何可用的存储引擎,“磁盘”存储便宜且持久,而“内存”存储则要快得多;

3、InnoDB是默认存储引擎,它可提供事务,全文索引和外键约束,因此适用于各种混合查询;它具有多种用途,支持读密集型工作负荷,读/写工作负荷和事务工作负荷;

4、其他存储引擎包括:

– MyISAM:适用于频繁读取但很少更新的数据;

– MEMORY:在内存中存储所有数据;

– NDB:供MySQL Cluster用来为高可用性数据提供冗余的可伸缩拓扑

注:存储引擎可扩展,超越存储层,而不只包含存储,它们还包括其他结构和实现机制;

存储引擎概览:

1、客户机通过以SQL语句形式向服务器发送请求从表中检索数据或更改表中的数据;

2、服务器通过使用双层处理模型执行每条语句;

3、客户机通常不需要关心哪些引擎参与SQL语句处理,这种独立于引擎的SQL语句的一些例外情况包括:

– CREATE TABLE具有ENGINE选项,可基于每个表指定要使用的引擎;

– ALTER TABLE具有ENGINE选项,允许将表转换为使用不同的存储引擎;

– 某些索引类型仅适用于特定存储引擎;例如,仅InnoDB和MyISAM引擎支持全文索引;

– COMMIT和ROLLBACK操作仅影响事务存储引擎(例如InnoDB和NDB)管理的表;

依赖于存储引擎的功能:

1、存储介质:表存储引擎可以在磁盘上,在内存中或通过网络存储数据;

2、事务功能:某些存储引擎支持全面的ACID事务功能,而其他存储引擎可能不具有事务支持;

3、锁定:存储引擎可能使用不同的锁定粒度(例如表级别锁定或行级别锁定)和机制来提供与并发事务的一致性;

4、备份和恢复:可能会受到存储引擎存储和操作数据的方式的影响;

5、优化:不同的索引实现可能会影响优化,存储引擎以不同的方式使用内部高速缓存,缓冲区和内存以优化性能;

6、特殊功能:某些引擎类型具有提供全文搜索和引用完整性的功能以及处理空间数据的能力;

TIPS:优化器可能需要根据存储引擎进行不同的选择,但这均是通过每种存储引擎支持的标准化接口(API)进行处理的;

19

MySQL如何使用磁盘空间

1、默认情况下,程序文件随数据目录一起存储在服务器安装目录下;执行各种客户机程序,管理程序和实用程序时将创建程序可执行文件和日志文件;

2、首要使用磁盘空间的是数据目录:

服务器日志文件和状态文件包含有关服务器处理的语句的信息,日志可用于进行故障排除/监视/复制和恢复;

InnoDB日志文件(适用于所有数据库)驻留在数据目录级别;

InnoDB系统表空间包含数据字典,撤消日志和缓冲区;

每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表),数据库目录存储以下内容:

– 数据文件:特定于存储引擎的数据文件,这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎;

– 格式文件(.frm):包含每个表和/或视图结构的说明,位于相应的数据库目录中;

– 触发器:与某个表关联并在该表发生特定事件时激活的命名数据库对象;

数据目录的位置取决于配置,操作系统,安装包和分发;典型位置是/var/lib/mysql;

MySQL在磁盘上存储系统数据库(mysql),mysql包含诸如用户/特权/插件/帮助列表/事件/时区实现和存储例程之类的信息;

20

MySQL如何使用内存

1、内存分配可以划分为以下两种类别:

– 全局(每实例内存):服务器启动时分配一次并在服务器关闭时释放,此内存在所有会话间共享;当所有物理内存用尽时,操作系统开始交换,这会对MySQL服务器性能具有不利影响,可能会导致服务器崩溃;

– 会话(每会话内存):基于每个会话(有时称为“线程”)动态进行分配;此内存可在会话结束时或不再需要会话时释放,此内存多用于处理查询结果,所使用的缓冲区大小基于每个连接;例如,read_buffer为10MB且具有100个连接意味着可能总共有100*10MB同时用于所有读取缓冲区;

内存结构:

服务器在运行时会为许多种类的数据分配内存:

1、查询高速缓存还用于加速处理重复发出的查询;

2、线程高速缓存:在MySQL(和其他程序)中使用线程将应用程序执行划分为两个或更多个同时运行的任务,将会为连接到MySQL服务器的每个客户机创建单独的线程以处理该连接;

3、缓冲区和高速缓存:缓冲区和高速缓存提供数据管理子系统并支持快速访问项目,例如授权表缓冲区,存储引擎缓冲区(如InnoDB的日志缓冲区)和保存开放表说明符的表开放缓冲区;如果使用MEMORY存储引擎,MySQL将使用主内存作为主体数据存储,其他存储引擎也可能使用主内存进行数据存储,但MEMORY是唯一的,未设计为在磁盘上存储数据;

4、连接/会话:

1).内部临时表:在某些查询执行情况下,MySQL会创建一个临时表来解析查询;可以在内存中或在磁盘上创建临时表,具体取决于其大小或内容或者查询语法;

2).特定于客户机的缓冲区:专门设计为支持所连接的各个客户机;缓冲区示例包括:

用于交换信息的通信缓冲区;

排序操作:表读取缓冲区(包括支持联接的缓冲区);

21

MySQL插件接口

1、当前,插件API支持:

– 可用于替换或扩充内置全文解析器的全文解析器插件;例如,某个插件可以使用不同于内置解析器所使用的规则将文本解析为字,要解析具有不同于内置解析器所预期的特征的文本,这很有用;

– 向服务器提供低级别存储,检索和数据索引的存储引擎;

– 信息模式插件;信息模式插件作为MySQL INFORMATION_SCHEMA数据库中的表出现,稍后将更详细地讨论INFORMATION_SCHEMA数据库;

– 守护进程插件启动在服务器内运行的后台进程(例如,定期执行心跳处理);

2、插件接口需要mysql数据库中的PLUGINS表,此表是在MySQL安装过程中创建的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值