初识mysql
- mysql:这是MySQL客户端进程的默认名
- mysqld:这是MySQL服务器进程的默认名
启动mysql服务器程序
- mysqld:运行这个文件就会启动一个mysql服务器程序,但是一般不用这个
- mysqld_safe:一个脚本,会间接启动mysqld,同时有指定日志和自动重启mysqld的功能
- mysql.server:一个对脚本的链接。会间接启动mysqld_safe。后面加选项
start
和stop
可以启动和停止 - 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语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)
服务器处理请求大致分成三步:
- 连接管理
- 解析与优化(包括:查询缓存、语法解析、查询优化)
- 存储引擎
连接管理
如上所述,客户端可以用TCP/IP
,命名管道或共享内存
,UNIX套接字
这几种方式与服务器连接。每当接受到一个连接时,服务器进行都会启动一个线程
来处理与客户端的交互。客户端断开连接后,线程不会立即销毁,而是缓存起来。有新的客户端请求时,则会分配缓存的线程。
解析与优化
查询缓存
- 两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。
- 查询使用了函数,自定义变量或涉及系统表,则不会缓存。
- 表的数据会结构被修改,则缓存失效。
语法解析
查询优化
使用EXPLAIN
加查询语句,可以看到对这条语句的分析
常用存储引擎
存储引擎 | 描述 |
---|---|
ACHIVE | 用于数据存档(插入后不能修改) |
InnoDB | 具备外键支持功能的事务存储引擎 |
MyISAM | 主要的非事务处理存储引擎 |
MEMORY | 置于内存的表 |
查看当前服务器程序支持的存储引擎
SHOW ENGINES;