mysql基础知识:
mysql客户端与服务端
-
服务端进程默认为mysqld
-
客户端进程默认为mysql
-
Mac上mysql安装目录为:/usr/local/mysql
-
/usr/local/mysql/bin/
目录下是mysql的可执行文件- mysqld
- mysqld_safe
- mysql.server
- mysql_multi
- …
mysql启动程序
-
mysqld
- 运行mysqld可直接启动一个mysql服务器进程
-
mysqld_safe
- 启动脚本,间接调用mysqld,同时启动监控进程
-
mysql.server
- 启动脚本,间接调用mysqld_safe,
- 属于链接文件
- mysql.server start: 启动服务器程序
- mysql.server stop: 终止正在运行的服务器程序
- 启动脚本,间接调用mysqld_safe,
-
mysql_multi
- 计算机可运行多个服务器进程
- 主要是监控每一个服务器进程的启动与停止
启动mysql客户端程序
- mysql -h主机名 -u用户名 -p密码
- 服务器运行在本机,则-h可以省略,或者为-hlocalhost , -h127.0.0.1, 也作 --host=localhost,-uroot也作–user=root, -p123456 也作 --password=123456
- 常见本地mysql启动命令为:mysql -uroot -p123456, 也可 mysql -u root -p123456, 即中间可以有间隙,除了密码
- 密码可以不输入,避免密码泄漏,新开一行输入:mysql -uroot -p
- 可以在多个终端窗口启动多个mysql客户端程序
- 参数摆放未知随意,如也可mysql -uroot -hlocalhost -p
客户端与服务端进程连接
-
运行的客户端与服务端程序本质是个进程(操作系统的相关知识,程序与进程的关系,运行的程序即为进程)
-
客户端向服务端发送请求得到响应就是进程间的通信
通信方式
- TCP/IP
- 使用mysqld -P3307可指定服务器监听哪个端口,默认是3306,如果被占用可用其他端口,范围是0~65535
- 客户端启动: mysql -h127.0.0.1 -uroot -p -P3307
- -P 是大写,区别于密码的-p
- 命名管道与共享内存(Windows)
- 套接字(类Unix)
- 指定主机名为localhost
- 指定–protocol=socket
- 默认的套接字文件路径为/tmp/mysql.sock
服务器处理客户端请求过程
- 连接管理
- 如果有客户端进程连接至服务器进程,服务器端就会创建一个线程来专门处理与客户端的交互过程,如果客户端与服务端断开连接,服务端不会立刻销毁这个线程,会将这个线程缓存,当新的客户端连接服务端时,从缓存中拿到该线程然后分配给新的客户端进程。
- 线程分配太多会影响性能,所以需要控制连接至服务端的客户端数量
- 解析与优化
- 查询缓存
- mysql服务端会将查询请求和结果缓存,当下次有一模一样的请求时,直接从缓存中获取结果。如果请求发生变化,比如sql同刚才的有一丁点儿不一样,都会重新查询
- 使用了部分函数比如now函数,每次时间都不一样,所以不会缓存
- 使用了系统表如mysql,sys等不会缓存
- 使用了用户的自定义函数,不会缓存
- 表结构和数据发生变化, 比如对表执行了update,insert,delete,alter,drop,truncate等操作,该表涉及的所有查询缓存都将被删除
- mysql8.0之后将缓存操作删除
- 语法解析
- 检查查询的sql语法是否正确,主要涉及词法分析,语法分析,语义分析等
- 查询优化
- 生成执行计划,根据执行计划来看使用哪些索引,哪些查询方法
- 查询缓存
- 存储引擎
- InnoDB
- MyISAM
- 存储引擎封装了数据的存取操作
物理上如何表示记录,怎么从表中读取数据,怎么把数据写入具体的物理存储器上,这都是存储引擎负责的事情
将不涉及数据存取的操作命名为MYSQL_server: 连接管理,查询缓存,语法解析,查询优化
存取数据的功能是存储引擎的功能,存储引擎向上层的MYSQL_server提供api接口。
MYSQL_server执行完查询优化后,就根据执行计划调用存储引擎的api,拿到数据返回给客户端
常用的存储引擎是InnoDB 和 MyISAM
查看存储引擎
show engines;
- Engine: 存储引擎名称
- Support:表示该存储引擎是否可用,default表示当前服务器程序默认的存储引擎
- Comment:对该存储引擎的描述
- Transactions:该存储引擎是否支持事务处理
- XA:该存储引擎是否支持分布式事务
- Savepoints:该存储引擎是否支持部分事务回滚