美文网首页
select user,host from mysql.user

select user,host from mysql.user

作者: 蔺蔺蔺赫赫 | 来源:发表于2019-07-18 16:15 被阅读0次

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层 数据结构换成人类可读的数据表的结构

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

相关文章

网友评论

      本文标题:select user,host from mysql.user

      本文链接:https://www.haomeiwen.com/subject/ewbllctx.html