MySQL的客户端/服务器架构

MySQL 服务器程序和客户端程序本质上都算是计算机上的一个进程,这个代表着 MySQL服务器程序的进程也被称为 MySQL数据库实例,简称数据库实例

MySQL 服务器进程的默认名称为 mysqld

MySQL 客户端进程的默认名称为 mysql

启动MySQL服务器的程序

mysqld: 直接启动一个服务器进程

mysqld_safe: 间接的调用 mysqld,启动了另外一个监控进程(服务器进程挂了的时候,可以帮助重启它),使用 mysqld_safe 启动服务器程序时,它会将服务器程序的
出错信息和其他诊断信息重定向到某个文件中,产生出错日志

mysql.server:间接的调用 mysqld_safe,在调用 mysql.server 时在后边指定 start 参数就可以启动服务器程序

这个 mysql.server 文件其实是一个链接文件,它的实际文件是 ../support-files/mysql.server

mysql.server stop:关闭正在运行的服务器程序

mysqld_multi:对每一个服务器进程的启动或停止进行监控

mysql:和服务器程序进程交互(eg: mysql -h主机名 -u用户名 -p密码)

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

MySQL 支持三种客户端进程和服务器进程的通信方式

  • TCP/IP
  • 命名管道和共享内存
    • 命名管道:在启动服务器程序的命令中加上 --enable-named-pipe 参数,然后在启动客户端程序的命令中加入 --pipe 或者 --protocol=pipe 参数
    • 共享内存:启动服务器程序的命令中加上 --shared-memory 参数,启动客户端程序的命令中加入 --protocol=memory 参数(使用 共享内存 的方式进行通信的服务器进程和客户端进程必须在同一台 Windows 主机)
    • Unix域套接字文件:启动客户端程序的时候指定的主机名为 localhost ,或者指定了 --protocol=socket 的启动参数
      • 默认监听的 Unix 域套接字文件路径为 /tmp/mysql.sock,改变这个默认路径,可以在启动服务器程序时指定 socket 参数 mysqld --socket=/tmp/a.txt

服务器处理客户端的请求

image-20240802213204096

每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来,在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端

客户端程序和服务器程序不运行在一台计算机上,我们还可以采用使用了 SSL (安全套接字)的网络连接进行通信,来保证数据传输的安全性

mysql的存储引擎(真实存取数据的功能)

  • 物理上如何表示记录
  • 怎么从表中读取数据
  • 怎么把数据写入具体的物理存储器上

常用的存储引擎

存储引擎 描述
ARCHIVE 用于数据存档(行被插入后不能再修改)
BLACKHOLE 丢弃写操作,读操作会返回空内容
CSV 存储数据时,以逗号分隔各个数据项
FEDERATED 用来访问远程表
InnoDB 具备外键支持功能的事务存储引擎
MEMORY 置于内存的表
MERGE 用来管理多个MyISAM表构成的表集合
MyISAM 主要的非事务处理存储引擎
NDB MySQL集群专用存储引擎

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

设置表的存储引擎:

  • 创建表时指定存储引擎:
    • CREATE TABLE 表名(
      建表语句;
      ) ENGINE = 存储引擎名称;
  • 修改表的存储引擎
    • ALTER TABLE 表名 ENGINE = 存储引擎名称