mysql select from user_select user,host from mysql.user; 这条查询语句到达mysql 从开始到结束到底经历了什么...

mysqld 程序运行原理

mysqld 程序结构

连接层:执行上调语句 首先要连接到数据库

连接层

1.提供链接协议(连接的方法)

socket(方法1 本地连接)

TCP/IP(方法2 远程连接)

2.接收到命令 验证用户名(root@'loacalhost')密码的合法性

验证用户 验证地址

3.接受SQL语句 派生一个专用的链接线程(接受语句 返回结果)

返回结果

show processlist;  查看当前连接的线程

思考

改密码的参数在哪里做的手脚

--skip-grant-tables 跳过授权表 不验证用户名密码

--skip-networking  仅限本地登陆 否则就成裸奔了

SQL层(优化方面,至关重要的)

专门做语句的处理工作  SQL转给SQL层来进行处理

连接层输入语句 回车 就交到了SQL层 之后

第一步 :验证SQL语法 和 SQL_MODE 是否正确

第二部 :验证语义

第三部 :验证这条SQL语句的权限

第四部 :SQL语句预处理

1.解析器进行语句解析 生成执行计划a b c三中方案(解析树)

2.优化器 有各种基于执行代价的算法

根据算法 找到代价最低的执行计划

代价:基于 CPU IO 内存  资源的消耗

第五步 :执行器按照优化器选择执行计划 执行SQL语句

得出获取数据的方法

未完待续 :假设命令不停的执行很多次

不可能整个流程都走一遍  这样浪费资源

这时候提供query cache缓存服务(默认不开)  不过这个一般是不开的  都是用Redis替代

记录操作日志 (binlog日志)包括备份恢复  主从复制

手动开  默认也不开  非常重要的日志文件

SQL层 提供的日志  只记录修改类的操作

存储引擎层(和磁盘打交道的一个层次)

根据SQL提供的获取数据的方法 拿到数据 返回给SQL层 数据结构换成人类可读的数据表的结构

再由连接层的线程 返回给用户

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值