MySQL提供了两种连接方式:
mysql -uroot -p123 -h 10.0.0.1 -P330
mysql -uroot -p123 -S /tmp/mysql.sock
当我们本地连接MySQL的时候,默认用的是socket方式,一般在配置文件中有体现:
[root@cs /]# cat /etc/my.cnf [mysqld] user=mysql basedir=/opt/mysql datadir=/data/mysql server_id=6 port=3306 socket=/tmp/mysql.sock [mysql] socket=/tmp/mysql.sock prompt=3306 [\\d]>
如上socket
指向的/tmp/mysql.sock
文件就是socket文件,通过这个文件进行连接;我们也能在本地找到这个文件:
[root@cs /]# ll /tmp/mysql.sock srwxrwxrwx 1 mysql mysql 0 8月 14 16:28 /tmp/mysql.sock
MySQL实例由以下几部分组成:
一台物理机上,通常可以部署一个实例;当然为了最大化的利用硬件性能,也可以部署多个实例。
MySQL架构总共四层:
首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。
第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数字和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。
第四层包含了文件系统,所有的表结构和数据以及用户操作的日志最终还是以文件的形式存储在硬盘上。
MySQL中一条SQL的执行过程:
由客户端向mysqld发送SQL语句
连接层
SQL层:
SQL_MODE
存储引擎层(类似Linux中的文件系统):根据SQL层执行的结果,从磁盘上拿数据,将16进制的磁盘数据,交由SQL结构化成表,由连接层的专用线程返回给用户
在MySQL中,逻辑结构由库和表组成,并且各自有各自的规范:
库相当于目录(文件夹)
在磁盘上,表的物理存储根据存储引擎的不同而有所不同,目前常用的有两种:
MyIASM:
INNODB:
如上示例是两种不同存储引擎的表的物理结构。
我们可以对应来理解:
只不过MySQL对这些有更严格的规范
原文:https://www.cnblogs.com/tracydzf/p/14098097.html