初学MySQL

1. MySql的客户端、服务端架构

  • MySQL是一个C/S架构。客户端需要输入账号密码才能登录MySQL服务器,本地也是如此,客户将请求发送给服务端后,服务端根据请求的内容来操作具体的数据,并将结果发送给客户端。

2. bin目录下的可执行文件

可执行文件作用
mysqldmysql服务程序,运行这个文件可运行MySQL服务进程
mysqld_safe启动脚本,执行这个文件会间接调用mysqld并持续监控服务器的运行状态。当服务器进程出现错误是,可以帮助重启服务器进程,可以将错误输出到错误日志中去
mysqld.server间接调用mysqld_safe,输入mysql.server start就可以启动服务进程。其实mysql.safe是一个连接文件,实际文件是../support-files/mysql.server
mysqld_multi可以运行多个服务器实例,也就是说可以运行多个MySQL服务器
  • MySQL的两种启动方式
    • 手动启动:点击mysqld,或直接双击。
    • 以服务方式启动:如果需要将某个程序长时间运行在计算机上,可以将其注册为一个windows服务。 完整可执行文件的路径 --install [-manual] [服务名],例如C:\Program Files\MySql\MySql Server 8.0\bin\mysqld,将MySQL注册为windows服务,通过net start MySql 和 net stop MySql来启动和开启MySQL。

3. 客户端和服务器的连接过程

MySQL支持几种客户端进程和服务端进程通信的方式。

  • TCP/IP:通过网络协议IP加端口号进行通信。MySQL默认监听3306端口
  • 命名管道和内存共享(客户端和服务端必须在同一台计算机上,并不常用)
    • 使用管道通信:在启动服务器程序的命令中加上--enable-named-pipe参数,然后在启动客户端程序的命令中加上-pipe或者--protocol=pipe
    • 使用共享内存进行通信:在启动服务器程序的命令中加上--shared-memory参数,成功后,共享内存成为本地客户端程序的默认连接方式。
  • UNIX域套接字

4. 服务器处理客户端请求

处理请求

4.1 连接管理

  • 每当有一个客户端连接到服务器时,服务进程都会创建一个线程来处理两者之间的交互,当客户端退出时会与服务端断开连接,但不会立即销毁这个进程,而是将其缓存起来,当有新的客户端需要连接时,服务端将缓存的进程资源分配给新的客户端,这样就不用频繁地创建和销毁进程,当然也可以限制连接到服务器的的客户数量。
  • 可以采用传输层安全性(TLS)协议对连接进行加密,将客户端输入的密码等信息传送给服务端,从而保证数据传输的安全性。

4.2 解析和优化

服务端将客户端发送的文本信息(SQL语句等)进行解析优化

  • 查询缓存

    服务端会将处理过的查询请求和结果缓存起来,如果下次有同样的请求发送,会从缓存中查找结果,就不用从底层的表中查找了。返回缓存中的结果比较苛刻,要求两次查询请求要完全相同(包括大小写、空格等),有些函数的结果并不会被缓存,比如NOW()函数返回的是当前时间就不会被缓存。
    MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改,如对该表使用了INSERT、 UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或 DROP DATABASE语句,那使用该表的所有高速缓存查询都将变为无效并从高速缓存中删除。
    维护缓存的开销比较高,从5.7.20开始不推荐查询缓存,8.0中直接将其删除

  • 语法解析

    将请求文本进行分析,判断语法是否有问题,然后从文本中将要查询的表、各种查询条件提取到服务器中。

  • 查询优化

    优化语句,比如将外连接转化成内连接、表达式简化、子查询转为连接,将结果生成一个执行计划

  • 存储引擎

    存储引擎将数据存储在内存中,如何记录,如果读取都是存储引擎需要做的事情,不同的引擎可能有这不同的存储结构,采用存储算法不同。表实际是一个逻辑上的概念,其中的数据散列地有规律地分布在不同的数据结构中。

    • 人们将MySQL的请求处理过程分为server层和存储引擎层。连接管理、查询优化等都是server层,存储引擎层是真实存放数据的,存储引擎为server层提供统一的接口,server层和存储引擎层是以记录为单位。server层判断某记录符合条件(如where语句)之后,先将其发送到缓冲区,当缓冲区满了,才向客户端返回真正的记录。

常用的存储引擎

存储引擎描述
InnoDB常用,支持事务、行级锁、外键
MyIsAM常用,主要的非事务处理引擎
NDBMySQL集群专用存储引擎
CSV存储数据时,以逗号分隔各个数据项
MEMORY只存储在内存,不存储在磁盘,多用户临时表

修改引擎:ALTER TABLE 表名 ENGINE = 存储引擎名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值