《MySQL是怎样运行的》

发布时间 2023-09-24 00:00:19作者: vLiion

第一章 初始MySQL


启动MySQL客户端程序

  1. 启动MySQL命令

    参数:mysql -h主机名 -u用户名 -P端口 -p密码

    如果要在一行命令中显式输入密码,那么-p后面接密码不能加空格(其它参数无所谓)

  2. 断开客户端与服务器的连接且关闭客户端

    • quit
    • exit
    • \q

服务器处理客户端请求

查询请求执行过程

1. 连接管理

  • 客户端进程可以采用TCP/IP、命名管道或共享内存、UNIX域套接字等几种方式与服务器进程建立连接
  • 当有一个客户端进程连接到服务器进程时,服务器进程会创建一个线程处理交互;当客户端退出时,服务器并不会立即销毁线程,而是缓存起来,给后面连接的使用。这样就不用频繁创建和销毁线程,从而节省了开销。
  • 我们可以通过采用传输层安全性(Transport Layer Security, TLS)协议对连接进行加密,来保证数据传输安全性。

2. 解析与优化

  • 查询缓存:将刚刚处理过的查询请求和结果返回起来,方便下一次请求直接从缓存中查找结果,,且可以在不同客户端之间共享。
  • 语法解析:请求得来的是一段文本,所以MySQL服务器对文本进行分析处理,判断语法是否正常,然后将要查询的表等信息放到服务器内部使用的一些数据结构上。
  • 查询优化:外连接转为内连接、表达式简化、子查询转为连接等等,优化结果为生成一个执行计划。可以使用EXPLAIN语句查看某个语句的执行计划。

3. 存储引擎

  • 到查询优化结束为止,仍然没有真正访问真实的表中数据(其实之前的查询优化中也会访问表中少量数据), 而数据的存储和提取操作都封装到了一个名为存储引擎的模块中。
  • 表是一行一行的记录,等等,这些都是一个逻辑上的概念。在物理上如何表示记录、读取、写入数据到具体的物理存储器上,都是储存引擎负责的事情。
  • 把存储引擎之前叫做server层,那么server层和存储引擎层交互一般以记录为单位,如果一条记录符合要求,那么就发送到一个缓冲区,等缓冲区满了,才向客户端发送记录。缓冲区大小由系统变量net_buffer_lenght控制。

存储引擎的一些操作

  • 查看当前服务器支持的存储引擎:SHOW ENGINES;

  • 创建表时指定存储引擎:CREATE TABLE 表名(

    建表语句

    )ENGINE = 存储引擎名称

  • 修改表的存储引擎:

    ALTER TABLE 表名 ENGINE = 存储引擎名称