Linux运维工程师面试题(5)

辛敞
• 阅读 878

Linux运维工程师面试题(5)

祝各位小伙伴们早日找到自己心仪的工作。
持续学习才不会被淘汰。
地球不爆炸,我们不放假。
机会总是留给有有准备的人的。
加油,打工人!

1 SELECT 语句处理的顺序

查询执行路径中的组件:查询缓存、解析器、预处理器、优化器、查询执行引擎、存储引擎

SELECT语句的执行流程:

FROM Clause --> WHERE clause --> GROUP BY --> HAVING clause --> SELECT --> ORDER BY --> LIMIT

2 MySQL 高可用方案有哪些

  • 主从复制+mycat 读写分离
  • MHA(Master High Availability)
  • Galera Cluster

3 mysql 主从复制原理

用户提交数据更新到主库,主库会生成二进制日志,写入到 bin log 中;主库开启 dump 线程,用来给从库的 io 线程传送 bin log;从库的 io 线程去请求主库的 bin log,并将得到的 bin log 写入到中继日志(relay log)中,sql 线程会读取 relay log 文件中的日志,并解析成具体的操作,来执行数据库更新,保证主库和从库数据一致,完成主从复制。

4 mycat 读写分离原理

Mycat 的原理中最重要的一个动词是"拦截",它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了—些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

5 MHA 高可用原理

  1. 从宕机崩溃的 master 保存二进制日志事件(bin log events);
  2. 识别含有最新更新的 slave;
  3. 应用差异的中继日志(relay log)到其他的 slave;
  4. 应用从 master 保存的二进制日志事件(bin log events);
  5. 提升—个 slave 为新的 master;
  6. 使其他的 slave 连接新的 master 进行复制。

6 mysqldump 备份的原理

是一个 mysql 的客户端命令,通过 mysql 协议连接至 mysql 服务器进行备份。mysqldump 命令将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。它先使用 select 查出需要备份表的数据和需要备份的表的结构,再在文本文件中生成一个 CREATE 语句。然后将表中的所有记录转换成一条 INSERT 语句。然后通过这些语句,就能够创建表并插入数据。其实就是相当于模拟mysql客户端去连接数据库,将mysql中的数据生成一个标准输出,在屏幕打印,一般配合标准输出重定向,导入到一个文件中。mysqldump 整体备份的基本流程如下:

  1. 调用 FTWRL(flush tables with read lock),全局禁止写。
  2. 开启快照读,获取此时的快照(仅对 innodb 表起作用)。
  3. 备份非 innodb 表数据( .frm、.myi、.myd 等)。
  4. 非 innodb 表备份完毕后,释放 FTWRL 锁。
  5. 逐一备份 innodb 表数据。
  6. 备份完成。

7 drop, delete 与 truncate 的区别,哪个最快

drop 直接删掉表;truncate 删除表中数据,再插⼊时自增长id又从1开始;delete 删除表中数据,可以加 where 子句。想要删除部分数据用 delete;想要删除表用 drop; 想保留表但是把数据删除,如果和事务无关用 truncate。

  1. delete 语句执⾏删除的过程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存以便进⾏回滚操作。truncate table则⼀次性地从表中删除所有的数据并不把单独的删除操作记录记⼊⽇志保存,删除⾏是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器,执⾏速度快。
  2. 表和索引所占空间。当表被 truncate 后,这个表和索引所占⽤的空间会恢复到初始⼤⼩,⽽ delete 操作不会减少表或索引所占⽤的空间。drop 语句将表所占⽤的空间全释放掉。
  3. ⼀般⽽⾔,在删除速度上,drop > truncate > delete。
  4. 应⽤范围:truncate 只能对 table,delete 可以是 table 和 view。
  5. truncate 和 delete 只删除数据,⽽ drop 则删除整个表(结构和数据)。
  6. truncate 与不带 where 的 delete:只删除数据,⽽不删除表的结构(定义);drop 语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。

8 判断主从延迟的方法

通过命令 show slave status 查看 seconds_behind_master 的值来判断

NULL - 表示 io_thread 或是 sql_thread 有任何一个发生故障,也就是该线程的 Running 状态是 No,而非Yes。

0 - 该值为零,是我们极为渴望看到的情况,表示主从复制状态正常。

9 MySQL 主要的索引类型

  • 普通索引:是最基本的索引,它没有任何限制;
  • 唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
  • 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
  • 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
  • 全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysql 中 MyISAM 支持全文索引而 InnoDB 不支持;

10 MySQL 中 myisam 与 innodb 的区别

  1. innodb⽀持事物, myisam不⽀持事物
  2. innodb⽀持⾏级锁, myisam⽀持表级锁
  3. innodb⽀持MVC, myisam不⽀持
  4. innodb⽀持外键, myisam不⽀持
  5. innodb不⽀持全⽂索引,myisam⽀持

关于我
全网可搜《阿贤Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、掘金、思否、开源中国、阿里云、腾讯云、华为云、今日头条、百家号、GitHub、个人博客
公众号:阿贤Linux
个人博客:blog.waluna.top
https://blog.waluna.top/

原文链接: Linux运维工程师面试题(5).

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
HTML5新增input标签属性
一.inputtype属性1<formaction""2邮箱<inputtype"email"name""id""<inputtype"submit"value"提交"<br/<br/3手机号码<inputtype"tel"name
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这