1_服务器处理客户端请求的过程

MySQL的客户端/服务端架构

  1. 启动MySQL服务器程序;

  2. 启动MySQL客户端程序,连接MySQL服务器程序;

  3. MySQL客户端程序请求MySQL服务器程序;

  4. MySQL服务器程序响应MySQL客户端程序;

启动的MySQL服务器进程的默认名称为mysqld, 启动的MySQL客户端进程的默认名称为mysql

MySQL在macOS的安装目录:/usr/local/mysql/

其中/usr/local/mysql/bin,存放可执行文件;


启动MySQL服务器程序

  • mysqld,代表MySQL服务器程序,一般不直接启用;
  • mysqld_safe
    • 启动脚本,间接调用mysqld;
    • 启动监控进程,帮助服务器程序在宕机时重启;
    • 出错信息和其他诊断信息重定向到出错日志文件;
  • mysql.server
    • 启动脚本,间接调用mysql.server;
    • mysql.server start启动服务器程序;
    • mysql.server stop关闭服务器程序;

启动MySQL客户端程序

启动MySQL客户端程序 + 连接MySQL服务器程序;

sudo mysql -h127.0.0.1 -uroot -proot


客户端与服务器连接的过程

本质上是一个进程间通信的过程,支持3种通信方式。

  1. TCP/IP
  2. 命名管道或者共享内存,在同一台Windows主机上;
  3. Unix域套接字文件,在同一台类Unix的机器上;

服务器处理客户端请求

MySQL客户端请求服务端
  1. 连接管理
    1. 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互;
    2. 当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来;
    3. 在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端;
    4. 不频繁创建和销毁线程,节省开销
  2. 解析与优化
    1. 查询缓存
      • 执行过程
        1. 执行查询,获取结果;
        2. 缓存查询对应的结果;
        3. 下次有相同请求,返回缓存中对应的结果;
      • 请求不会被缓存
        • 包含某些系统函数、用户自定义变量和函数、一些系统表;
      • 缓存未命中
        • 在任何字符上的不同,例如空格、注释、大小写;
      • 缓存失效
        • 表的结构或者数据被修改,执行了TRUNCATE TABLE、ALTER TABLE、DROP TABLE、DROP DATABASE、INSERT、 UPDATE、DELETE语句,该表涉及的所有缓存都将变为无效并从中删除;
      • 从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
    2. 语法解析
      1. 若未命中缓存,则开始执行查询;
      2. 类似编译过程,涉及词法解析、语法分析、语义分析;
      3. 解析执行需要的信息,例如查询的列、表、搜索条件;
    3. 查询优化
      1. 优化SQL语句的执行效率;
      2. 结果生成一个执行计划,使用EXPLAIN语句查看;
  3. 存储引擎
    1. 连接管理、查询缓存、语法解析、查询优化划分为MySQL Server,涉及逻辑概念
    2. 数据的存储和读取操作划分为存储引擎,涉及物理存储器

最常用的存储引擎是InnoDB和MyISAM。

Feature MyISAM InnoDB NDB
B-tree indexes yes yes no
Backup/point-in-time recovery yes yes yes
Cluster database support no no yes
Clustered indexes no yes no
Compressed data yes yes no
Data caches no yes yes
Encrypted data yes yes yes
Foreign key support no yes yes
Full-text search indexes yes yes no
Geospatial data type support yes yes yes
Geospatial indexing support yes yes no
Hash indexes no no yes
Index caches yes yes yes
Locking granularity Table Row Row
MVCC no yes no
Query cache support yes yes yes
Replication support yes yes yes
Storage limits 256TB 64TB 384EB
T-tree indexes no no yes
Transactions no yes yes
Update statistics for data dictionary yes yes yes

posted @ 2024-09-30 19:24  夜是故乡明  阅读(4)  评论(0编辑  收藏  举报