MySql教程

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

本文主要是介绍面试官:关于数据库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的运维架构体系和备份方法。

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

后续

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

这篇关于面试官:关于数据库MySQL说说你的理解吧的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!