mysql基础知识:

按照mysql客户端 mysql的客户端和服务端_按照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: 终止正在运行的服务器程序
  • mysql_multi
  • 计算机可运行多个服务器进程
  • 主要是监控每一个服务器进程的启动与停止
启动mysql客户端程序
  1. mysql -h主机名 -u用户名 -p密码
  2. 服务器运行在本机,则-h可以省略,或者为-hlocalhost , -h127.0.0.1, 也作 --host=localhost,-uroot也作–user=root, -p123456 也作 --password=123456
  3. 常见本地mysql启动命令为:mysql -uroot -p123456, 也可 mysql -u root -p123456, 即中间可以有间隙,除了密码
  4. 密码可以不输入,避免密码泄漏,新开一行输入:mysql -uroot -p
  5. 可以在多个终端窗口启动多个mysql客户端程序
  6. 参数摆放未知随意,如也可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客户端 mysql的客户端和服务端_客户端_02

  • 连接管理
  • 如果有客户端进程连接至服务器进程,服务器端就会创建一个线程来专门处理与客户端的交互过程,如果客户端与服务端断开连接,服务端不会立刻销毁这个线程,会将这个线程缓存,当新的客户端连接服务端时,从缓存中拿到该线程然后分配给新的客户端进程。
  • 线程分配太多会影响性能,所以需要控制连接至服务端的客户端数量
  • 解析与优化
  • 查询缓存
  • 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;

按照mysql客户端 mysql的客户端和服务端_按照mysql客户端_03

  1. Engine: 存储引擎名称
  2. Support:表示该存储引擎是否可用,default表示当前服务器程序默认的存储引擎
  3. Comment:对该存储引擎的描述
  4. Transactions:该存储引擎是否支持事务处理
  5. XA:该存储引擎是否支持分布式事务
  6. Savepoints:该存储引擎是否支持部分事务回滚