MySQL架构
MySQL程序是由客户端和服务端两部分构成的。
- 客户端:负责访问服务端程序,像服务端程序发送增删改查的请求
- 服务端:一个服务端可以接受多个客户端程序的连接,在接收到客户端的请求后对存储的数据进行相关的处理。
启动MySQL服务程序
类Unix系统启动
-
mysqld
mysqld
是bin目录下的一个可以执行文件。在命令行输入此命令可以启动一个MySQL进程。 -
mysqld_safe
mysqld_safe
是一个启动脚本,会间接的调用mysqld执行文件,当MySQL出现错误的时候会帮助重启服务器,将错误信息输出到错误日志。(**PS:**在Linux系统中推荐使用此方法启动MySQL服务器) -
mysql.server
-
mysqld_multi
当需要启动/停止多个MySQL服务器实例的时候可以使用mysqld_multi。
在Windows启动
除了前面介绍过的mysqld
以外,我们也可以是将其注册为一个服务,由操作系统帮我们管理。
-
注册服务:
mysqld --install
,默认服务的名称为MySQL。 -
启动服务:
net stat mysql
-
关闭服务:
net stop mysql
启动MySQL客户端程序
利用mysql
可执行文件可以向服务端发送连接请求。
mysql -h主机名 -u用户名 -p密码
参数名 | 描述 |
---|---|
-h(–host) | 表示连接的服务器进程所在的域名或IP.如果服务器于客户端在同一设备可以忽略此参数。 |
-u(–user) | 表示用户名 |
-p(–password) | 表示密码 |
**PS:**当使用短形式参数的时候使用的是短划线,长形式参数的时候使用的是双划线。
连接注意实现
- 做好不要在一行命令中输入密码,这时候密码对外是显示的。可以在
-p
后回车。 - mysql各个参数的顺序是可以随便调换的,不过为了方便最好还是使用上面的顺序。
- 在类Unix系统中如果不是写
-u
默认使用当前登录用户的用户名,对于windows来说默认的是ODBC. - 退出连接的命令
exit
,quit
,\q
MySQL连接
-
TCP/IP连接
MySQL启动的时候默认监听的是3306端口号,这端口是是可以以改变的
mysqld -P端口号
可以使其监听其他的端口。 -
命名管道和共享内存
在windows系统中可以使用该方式。
-
Unix域套接字
如果客户端和服务端都运行在同一台类Unix的操作系统上,则可以使用Unix域套接字进行通信。
请求过程
连接管理
当客户端向服务端发送一个连接请求的时候,服务端会创建一个新的线程来处理该请求。当用户断开连接的时候,服务器不会立即把线程销毁而是缓存起来,当有一个新的请求连接的时候复用改线程。
当客户端发起连接请求的时候需要携带主机信息、用户名、密码等信息,如果认证失败则拒绝连接。
可以使用TLS进行信息加密。
解析与优化
-
缓存查询
服务器会把处理过的请求和结果缓存起来,如果由下次由相同的请求,直接返回缓存的结果。这个缓存在不同的客户端之间是共享的。
如果查询的语句中由任何的不同则缓存不会命中。带有类似时间函数的请求并不会被缓存。
如果缓存的表中结构或者数据被修改的话则和该表有关的所有缓存全部失效。
**ps:**5.7.20开始不推荐使用缓存,8.0直接删除缓存。
-
语法解析
从我们发送过来的请求文本中提出需要的信息进行编译。
-
语法优化
对我们的SQL语句进行一定程度的优化。
存储引擎
存储引擎直接和硬件进行数据交换。负责接受上层传递的指令,然后对表中的数据进行读写操作(类似于项目负责人的角色)。
**ps:**5.5.5后默认存储引擎为InnoDB,之前为MyISAM.
操作命令:
- 查看服务器支持的引擎:
show engines
- 建表设置存储引擎
create table myisam_table(
-> id int
-> ) engine = myisam;
- 修改存储引擎
alter table myisam_table engine=innodb;
- 查看表结构
show create table myisam_table;
本文为《MySQL是怎样运行的》读书笔记