文章目录
万万没想到,一个运维去面试,面的全是数据库,因为在面试官心里运维应该对数据库很熟。
的确是对数据库很熟, 那为什么还回答的不好? 主要是因为给的工资少,如果给多点,能更熟。
没有很熟,只有更熟!
万万没想到,一个运维去面试,不问体系架构,只问增删改查,只问事务和存储过程,他们希望一个运维,最好把DBA的活给干了,但不给DBA的工资。
开发小张正在拼命的写着bug,时而停下喝一口冒着热气的咖啡,鬼知道是第几杯,只见小张运指如飞,屏幕上满是 “小bug蹲,小bug蹲,小bug蹲完了大bug蹲”;
一阵铜铃般的笑声传来,惊得小张差点把刚入口的咖啡喷到屏幕上, 真的是未见其人先闻其声,身后传来HR小王的声音“快点小张,来面试的了,面运维你去看看。”
“bug”小王愤愤的说,代码都写不完了,天天给你面试,还是面的运维,他会数据库吗?
拿着HR扔过来的简历,快步走向会客室。
话说会客室这位,也是3年运维经验的小刘,正正襟危坐,等候技术面试官的到来。
小张招呼小刘做下,问了几个数据库的问题
小刘都一一回答了,这时小张想故意为难下面试者,就抛出了一个问题,说说你对数据库的理解吧? 问完之后,小张得意的看着面试者,心想“这下看你咋回答”
小刘毕竟是老运维,看着面试官得意的微笑,心里不由的一紧,又故作镇静的回答到:
关于MySQL的理解,我们先来说说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中有数据就直接返回给客户端,但在生产中,这一项建议关闭。 因为他只能缓存静态数据信息,一旦数据发生变化,比如经常读写,这个参数开启就没有任何的意义。
在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的运维架构体系和备份方法。
面试官一看这也难不住他啊,于是作罢,起身送客
预知后事如何,我们下回再见。