Skip to content

初识mysql

  • mysql:这是MySQL客户端进程的默认名
  • mysqld:这是MySQL服务器进程的默认名

启动mysql服务器程序

  • mysqld:运行这个文件就会启动一个mysql服务器程序,但是一般不用这个
  • mysqld_safe:一个脚本,会间接启动mysqld,同时有指定日志和自动重启mysqld的功能
  • mysql.server:一个对脚本的链接。会间接启动mysqld_safe。后面加选项startstop可以启动和停止
  • mysqld_multi:启动多个服务器实例

启动mysql客户端程序

mysql -h主机名  -u用户名 -p密码

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

MySQL默认通信使用TCP协议,默认端口号3306

Windows上可以使用命名管道共享内存进行通信

Unix上还可以使用套接字进行通信

mysqld --socket=/tmp/a.txt  # 这样服务器启动后便会监听/tmp/a.txt

启动客户端

mysql -hlocalhost -uroot --socket=/tmp/a.txt -p

服务器处理客户端请求

不管采用哪种通信方式,最后实现的功能都是:客户端进程向服务器进程发送一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)

服务器处理请求大致分成三步:

  1. 连接管理
  2. 解析与优化(包括:查询缓存、语法解析、查询优化)
  3. 存储引擎

连接管理

如上所述,客户端可以用TCP/IP命名管道或共享内存UNIX套接字这几种方式与服务器连接。每当接受到一个连接时,服务器进行都会启动一个线程来处理与客户端的交互。客户端断开连接后,线程不会立即销毁,而是缓存起来。有新的客户端请求时,则会分配缓存的线程。

解析与优化

查询缓存

  • 两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。
  • 查询使用了函数,自定义变量或涉及系统表,则不会缓存。
  • 表的数据会结构被修改,则缓存失效。

语法解析

查询优化

使用EXPLAIN加查询语句,可以看到对这条语句的分析

常用存储引擎

存储引擎 描述
ACHIVE 用于数据存档(插入后不能修改)
InnoDB 具备外键支持功能的事务存储引擎
MyISAM 主要的非事务处理存储引擎
MEMORY 置于内存的表

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

SHOW ENGINES;