Linux运维工程师面试题(5)1 SELECT 语句处理的顺序2 MySQL 高可用方案有哪些3 mysql 主从复制原理4 mycat 读写分离原理5 MHA 高可用原理6 mysqldump 备份的原理7 drop, delete 与 truncate 的区别,哪个最快8 判断主从延迟的方法9 MySQL 主要的索引类型10 MySQL 中 myisam 与 innodb 的区别


(资料图)

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

1 SELECT 语句处理的顺序

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

SELECT语句的执行流程:

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 高可用原理

从宕机崩溃的 master 保存二进制日志事件(bin log events);

识别含有最新更新的 slave;

应用差异的中继日志(relay log)到其他的 slave;

应用从 master 保存的二进制日志事件(bin log events);

提升—个 slave 为新的 master;

使其他的 slave 连接新的 master 进行复制。

6 mysqldump 备份的原理

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

调用 FTWRL(flush tables with read lock),全局禁止写。

开启快照读,获取此时的快照(仅对 innodb 表起作用)。

备份非 innodb 表数据( .frm、.myi、.myd 等)。

非 innodb 表备份完毕后,释放 FTWRL 锁。

逐一备份 innodb 表数据。

备份完成。

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

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

delete 语句执⾏删除的过程是每次从表中删除⼀⾏,并且同时将该⾏的删除操作作为事务记录在⽇志中保存以便进⾏回滚操作。truncate table则⼀次性地从表中删除所有的数据并不把单独的删除操作记录记⼊⽇志保存,删除⾏是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器,执⾏速度快。

表和索引所占空间。当表被 truncate 后,这个表和索引所占⽤的空间会恢复到初始⼤⼩,⽽ delete 操作不会减少表或索引所占⽤的空间。drop 语句将表所占⽤的空间全释放掉。

⼀般⽽⾔,在删除速度上,drop > truncate > delete。

应⽤范围:truncate 只能对 table,delete 可以是 table 和 view。

truncate 和 delete 只删除数据,⽽ drop 则删除整个表(结构和数据)。

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 的区别

innodb⽀持事物, myisam不⽀持事物

innodb⽀持⾏级锁, myisam⽀持表级锁

innodb⽀持MVC, myisam不⽀持

innodb⽀持外键, myisam不⽀持

innodb不⽀持全⽂索引,myisam⽀持

以上面试题仅仅个人总结,想到什么就写什么,没有任何顺序,写的有什么不对的地方请各位大佬评论、留言,我会及时更正。

原文链接: [Linux运维工程师面试题(5)](https://blog.waluna.top/2023/03/05/1355/).

推荐内容