高性能MySQLMysql

【Mysql技术内幕笔记--1】--Mysql体系结构和存储引擎

2018-12-16  本文已影响5人  都是浮云啊

前言

首先Mysql是一个可移植的数据库,几乎在当前所有系统上都能运行,比如Mac/Linux/Windowns。尽管各个平台在底层实现方面各有不同,但是Mysql基本上能保证各个平台上的物理体系结构的一致性

1. Mysql的体系结构

1.1 Mysql的数据库与数据库实例

数据库(也就是常说的database)和数据库实例(instance这个说的比较少,但是用的多)之间的区别如下:

二者的名字可能在平时经常弄错,但是它们的职责却是完全不同的,在Mysql数据库中,实例与数据库的关系一般是一一对应的,也就是一个实例对应一个数据库,但是在集群情况下,一个数据库可能被多个数据库实例使用。Msyql是一个单进程多线程架构的数据库,Mysql数据库实例从系统的角度来看就是一个进程。从概念上来说,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器的数据集合。数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库的任何操作包括数据库定义、查询、维护都是在数据库实例下进行的。应用程序只有通过数据库实例才能和数据库打交道。

1.2 Mysql的启动过程

当启动实例时,Mysql会去读取配置文件,根据配置文件的参数来启动数据库实例。在mysql数据库中,启动实例的时候按照/etc/my.cinf --> /etc/mysql/my.cnf-->/usr/local/mysql/etc/my.cnf --> ~/.my.cnf这个顺序来加载配置文件的,并且后来者的配置会覆盖掉前面的配置,之所以这么搞是因为在不同的平台下这个配置文件的默认位置是不一样的。关于配置文件的内容,暂时只关注datadir这个参数,从名字就能看出来,这个参数制定了数据库所在的路径,这个路径可以修改的,在Linux下默认是/usr/local/mysql/data,要注意的是这个路经只是一个链接,指向了/opt/mysql_data这个目录,所以用户必须保证有这个目录的读写权限才能访问。

1.3 Mysql体系结构

话不多说,先上个官方给的图:


中文版架构图.jpg Mysql数据库的体系结构.png

从图里可以知道,Mysql由以下几个部分组成的:

1.4 Mysql的存储引擎

Mysql的插件式的存储引擎结构可以说是Mysql很大的一个特性,好处是每个存储存储引擎都有各自的特点,能够根据具体的应用建立不同存储引擎表。又因为Mysql是开源的,所以有能力需求的公司可以根据自己的需要进行编写自己定义的引擎,比如大名鼎鼎的InnoDB最开始就是第三方公司写的,后来被官方收购了。简单说下2种常见的存储引擎:

每种存储引擎的实现都不相同的,可以通过SHOW ENGINES查看当前的mysql版本所支持的存储引擎。

1.5 Mysql的连接
1.5.1 TCP/IP方式

连接Mysql操作是一个连接进程和Mysql数据库实例进行通信,从程序设计的角度来说,本质上是进程通信。TCP/IP套接字方式是Mysql在任何平台下都提供的连接方式,也是网络中使用的最多的一种方式。这种方式在TCP/IP连接上建立一个基于网络的连接请求,一般情况下客户端在一台服务器上,而Mysql实例(server)在另一台服务器上,他们通过TCP/IP网络连接。在通过TCP/IP连接到MYSQL实例时,Mysql数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到Mysql实例,该视图在Mysql架构下,表名为user。这个表控制了某主机连接mysql的权限。

1.5.2 UNIX套接字

在Linux和UNIX环境下,还可以使用UNIX套接字连接,而UNIX套接字不是网络协议,所以就要求数据库实例和客户端在同一台服务器上,也就是本机安装的时候在配置文件中指定套接字文件的路径,--socket=/tmp/mysql.sock。在知道了它的路径之后,就可以使用套接字进行连接,mysql -udavid -S /tmp/mysql.sock

小结

上一篇 下一篇

猜你喜欢

热点阅读