极客进化岛
技术自由路

面试官:关于数据库MySQL说说你的理解吧

文章目录

万万没想到
面试前戏
面试开始
1. MySQL体系结构
2. 我们再来看看Query Cache
后续

万万没想到

万万没想到,一个运维去面试,面的全是数据库,因为在面试官心里运维应该对数据库很熟。

的确是对数据库很熟, 那为什么还回答的不好? 主要是因为给的工资少,如果给多点,能更熟。

没有很熟,只有更熟!

万万没想到,一个运维去面试,不问体系架构,只问增删改查,只问事务和存储过程,他们希望一个运维,最好把DBA的活给干了,但不给DBA的工资。

面试前戏

开发小张正在拼命的写着bug,时而停下喝一口冒着热气的咖啡,鬼知道是第几杯,只见小张运指如飞,屏幕上满是 “小bug蹲,小bug蹲,小bug蹲完了大bug蹲”;

一阵铜铃般的笑声传来,惊得小张差点把刚入口的咖啡喷到屏幕上, 真的是未见其人先闻其声,身后传来HR小王的声音“快点小张,来面试的了,面运维你去看看。”

“bug”小王愤愤的说,代码都写不完了,天天给你面试,还是面的运维,他会数据库吗?

拿着HR扔过来的简历,快步走向会客室。

话说会客室这位,也是3年运维经验的小刘,正正襟危坐,等候技术面试官的到来。

面试开始

小张招呼小刘做下,问了几个数据库的问题
1. 数据库你们都用过哪些?
2. 数据库删除有两种方式,这两种方式的区别?

小刘都一一回答了,这时小张想故意为难下面试者,就抛出了一个问题,说说你对数据库的理解吧? 问完之后,小张得意的看着面试者,心想“这下看你咋回答”

小刘毕竟是老运维,看着面试官得意的微笑,心里不由的一紧,又故作镇静的回答到:

关于MySQL的理解,我们先来说说MySQL的体系结构:

1. MySQL体系结构

mysql的体系结构可以分成3个部分,分别是:

  • mysql-client: 比如一个命令行,或者使用java的JDBC发送sql语句

  • mysql-server: 分为5个部分

    • [ ] 连接器 (管理连接权限认证)
    • [ ] 查询缓存 (命中则缓存起来)
    • [ ] 分析器 (词法 语法分析)
    • [ ] 优化器 (执行计划生成,索引选择)
    • [ ] 执行器(操作,返回结果)
  • mysql-存储引擎: 负责存储数据,提供读写接口(建表的时候指定MyISAM,InnoDB , Memory)

这里祭出MySQL官网的体系架构图:

在这里插入图片描述

应用程序通过接口(如:ODBC,JDBC)来连接MySQL,最先连接处理的是连接层,连接层包括通信协议,线程处理,用户名密码认证等三个部分。

  • 通信协议负责检测客户端版本是否兼容MySQL客户端。
  • 线程处理是指每一个连接请求都会分配一个对应的线程。 相当于一条sql对应一个线程, 一个线程对应一个- 逻辑CPU,并会在多个逻辑CPU之间进行切换。

  • 用户名密码认证创建账号和密码,以及host主机授权是否可以连接到MySQL服务器。

SQL层包含权限判断,查询缓存,解析器,预处理,查询优化器,缓存和执行计划。

  • 权限判断可以审核用户有没有访问某个库,表,或者表里的行的权限。
  • 查询缓存是通过Query Cache进行操作,如果数据在Query Cache中,则直接返回结果给客户端。
  • 查询解析器是对SQL语句进行解析,判断语法是否正确。
  • 预处理器对解析器无法解析的语句进行处理。
  • 优化器对SQL进行改写和相应的优化,并生成最优的执行计划,通过调用程序API接口,通过存储引擎层进行数据的访问
    存储引擎层也是MySQL数据库区别与其他数据库很重要的一点。
2. 我们再来看看Query Cache

刚刚我们说到Query Cache中有数据就直接返回给客户端,但在生产中,这一项建议关闭。 因为他只能缓存静态数据信息,一旦数据发生变化,比如经常读写,这个参数开启就没有任何的意义。

在MySQL5.6之前是默认开启的,MySQL5.6之后则是默认关闭的。在MySQL8之后的版本中直接给删除了

mysql> show variables like "%query_cache
%";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| have_query_cache | NO    |
+------------------+-------+
1 row in set

一般开启为ON, 关闭为OFF , 在MySQL8中直接为NO, 已经不再需要这个缓存参数了

小刘滔滔不绝的把MySQL的体系架构说完了,然后又说了下MySQL的运维架构体系和备份方法。

面试官一看这也难不住他啊,于是作罢,起身送客

后续

预知后事如何,我们下回再见。

赞(0)
未经允许不得转载:极客进化岛 » 面试官:关于数据库MySQL说说你的理解吧