ITPub博客

首页 > 数据库 > MySQL > MySQL 面试题

MySQL 面试题

MySQL 作者:huyangg 时间:2015-12-01 16:22:42 0 删除 编辑

转载自 http://blog.csdn.net/mchdba/article/details/13505701


1, mysql的复制原理以及流程。

    (1)先问基本原理流程,3个线程以及之间的关联。

    (2)再问一致性延时性,数据恢复。

    (3)再问各种工作遇到的复制bug的解决方法



2, mysql中myisam与innodb的区别,至少5点。
     (1) 问5点不同
     (2) 问各种不同mysql版本的2者的改进
     (3)2者的索引的实现方式

3, 问mysql中varchar与char的区别以及varchar(50)中的30代表的涵义。

       (1)varchar与char的区别

       (2)varchar(50)中50的涵义

       (3)int(20)中20的涵义

       (4)为什么MySQL这样设计?

        [备注] 本人也面试了近12个2年mysql dba经验的朋友,很少能回答出第(2)以及(4)题。



4, 问了innodb的事务与日志的实现方式。 

        (1)有多少种日志

        (2)日志的存放形式

        (3)事务是如何通过日志来实现的,说得越深入越好。



5, 问了mysql binlog的几种日志录入格式以及区别

        (1)各种日志格式的涵义

        (2)适用场景

        (3)结合第一个问题,每一种日志格式在复制中的优劣。



6, 问了下mysql数据库cpu飙升到500%的话他怎么处理?

         (1) 没有经验的,可以不问

         (2)有经验的,问他们的处理思路



7, sql优化。

         (1)explain出来的各种item的意义

         (2)profile的意义以及使用场景。

         (3)explain中的索引问题。


8,  备份计划,mysqldump以及xtranbackup的实现原理,

            (1) 备份计划

             (2)备份恢复时间

             (3)备份恢复失败如何处理



9,  500台db,在最快时间之内重启。
 

10, 在当前的工作中,你碰到到的最大的mysql db问题是?


11,  innodb的读写参数优化

     (1)读取参数,global buffer pool以及 local buffer 

     (2)写入参数

     (3)与IO相关的参数

     (4)缓存参数以及缓存的适用场景


12 ,请简洁地描述下MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?


13,表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问

       (1)您 是选择拆成子表,还是继续放一起?

       (2)写出您这样选择的理由?
 

14,MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的? 





1    2年MySQL DBA经验
      其中许多有水分,一看到简历自我介绍,说公司项目的时候,会写上linux系统维护,mssql server项目,或者oracle data gard项目,一般如果有这些的话,工作在3年到4年的话,他的2年MySQL DBA管理经验,是有很大的水分的。刚开始我跟领导说,这些不用去面试了,肯定mysql dba经验不足,领导说先面面看看,于是我就面了,结果很多人卡在基础知识这一环节之上,比如:
(1)有的卡在复制原理之上
(2)有的卡在binlog的日志格式的种类和分别
(3)有的卡在innodb事务与日志的实现上。
(4)有的卡在innodb与myisam的索引实现方式的理解上面。
         .........
         关于基础知识考查点,请参考我整理的基础面试点总结: http://blog.csdn.net/mchdba/article/details/13505701
个人觉得如果有过真正的2年mysql专职dba经验,那么肯定会在mysql的基本原理上有所研究,因为很多问题都不得不让你去仔细研究各种细节,而自己研究过的细节肯定会记忆深刻,别人问起一定会说的头头是道,起码一些最基本的关键参数比如Seconds_Behind_Master为60这个值60的准确涵义,面试了10+的mysql dba,没有一个说的准确,有的说不知道忘记了,有的说是差了60秒,有的说是与主上执行时间延后了60秒。


2   对于简历中写有熟悉mysql高可用方案
    我一般先问他现在管理的数据库架构是什么,如果他只说出了主从,而没有说任何ha的方案,那么我就可以判断出他没有实际的ha经验。不过这时候也不能就是断定他不懂mysql高可用,也许是没有实际机会去使用,那么我就要问mmm以及mha以及mm+keepalived等的原理实现方式以及它们之间的优势和不足了,一般这种情况下,能说出这个的基本没有。






3   对于简历中写有批量MySQL 数据库服务器的管理经验
     这个如果他说有的话,我会先问他们现在实际线上的mysql数据库数量有多少,分多少个节点组,最后问这些节点组上面的slow log是如何组合在一起来统计分析的。如果这些他都答对了,那么我还有一问,就是现在手上有600台数据库,新来的机器,Mysql都安装好了,那么你如何在最快的时间里面把这600台mysql数据库的mysqld服务启动起来。这个重点在于最快的时间,而能准确回答出清晰思路的只有2个人。




4   对于有丰富的SQL优化的经验
    首先问mysql中sql优化的思路,如果能准备说出来,ok,那么我就开始问explain的各种参数了,重点是select_type,type,possible_key, ref,rows,extra等参数的各种值的含义,如果他都回答正确了,那么我再问file sort的含义以及什么时候会出现这个分析结果,如果这里他也回答对了,那么我就准备问profile分析了,如果这里他也答对了,那么我就会再问一个问题,那是曾经tx问我的让我郁闷不已的问题,一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。


关于explain的各种参数,请参考:http://blog.csdn.net/mchdba/article/details/9190771


5   对于有丰富的数据库设计经验
这个对于数据库设计我真的没有太多的经验,我也就只能问问最基础的,mysql中varchar(60) 60是啥含义,int(30)中30是啥含义? 如果他都回答对了,那么我就问mysql中为什么要这么设计呢? 如果他还回答对了,我就继续问int(20)存储的数字的上限和下限是多少?这个问题难道了全部的mysql dba的应聘者,不得不佩服提出这个问题的金总的睿智啊,因为这个问题回答正确了,那么他确实认认真真地研究了mysql的设计中关于字段类型的细节。至于丰富的设计数据库的经验,不用着急,这不我上面还有更加厉害的dba吗,他会搞明白的,那就跟我无关了。




6  关于mysql参数优化的经验。
    首先问他它们线上mysql数据库是怎么安装的,如果说是rpm安装的,那么我就直接问调优参数了,如果是源码安装的,那么我就要问编译中的一些参数了,比如my.cnf以及存储引擎以及字符类型等等。然后从以下几个方面问起:
(1)mysql有哪些global内存参数,有哪些local内存参数。
(2)mysql的写入参数需要调整哪些?重要的几个写参数的几个值得含义以及适用场景,比如innodb_flush_log_at_trx_commit等。
(3)读取的话,那几个全局的pool的值的设置,以及几个local的buffer的设置。
(4)还有就是著名的query cache了,以及query cache的适用场景了,这里有一个陷阱,就是高并发的情况下,比如双十一的时候,query cache开还是不开,开了怎么保证高并发,不开又有何别的考虑?


7  关于事物隔离级别。
这个最起码你得知道那4个隔离级别的名字吧,以及之间的区别,还有你当前自己数据库里面设置的是哪个级别吧,可惜的是面试了那么多,能准备想都不用想的回答出的就只有一个,而且他只说出了前3个级别的名字。
关于事务隔离级别简单资料,请参考:http://blog.csdn.net/mchdba/article/details/12837427


8  关于熟悉mysql的锁机制。
那么gap锁,next-key锁,以及innodb的行锁是怎么实现的,以及myisam的锁是怎么实现的等,可惜能准备说出这些的只有一个mysql dba。


9  关于熟悉mysql集群的。
我就问了ndbd的节点的启动先后顺序,再问配置参数中的内存配置几个重要的参数,再问sql节点中执行一个join表的select语句的实现流程是怎么走的?ok,能回答的也只有一个。
关于mysql集群入门资料,请参考:http://write.blog.csdn.net/postlist/1583151/all


10  关于有丰富的备份经验的
就问mysqldump中备份出来的sql,如果我想sql文件中,一行只有一个insert .... value()的话,怎么办?如果备份需要带上master的复制点信息怎么办?或者xtrabackup中如何做到实时在线备份的?以及xtrabackup是如何做到带上master的复制点的信息的? 当前xtrabackup做增量备份的时候有何缺陷?
        能全部回答出来的没有一个,不过没有关系,只要回答出mysqldump或者xtrabackup其中一个的也可以。


11 关于有丰富的线上恢复经验的
就问你现在线上数据量有多大,如果是100G,你用mysqldump出来要多久,然后mysql进去又要多久,如果互联网不允许延时的话,你又怎么做到恢复单张表的时候保证nagios不报警。如果有人说mysqldump出来1个小时就ok了,那么我就要问问他db服务器是啥配置了,如果他说mysql进去50分钟搞定了,那么我也要问问他db机器啥配置了,如果是普通的吊丝pc server,那么真实性,大家懂得。
然后如果你用xtrabackup备份要多久,恢复要多久,大家都知道copy-back这一步要很久,那么你有没有办法对这一块优化。




来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17283404/viewspace-1850691/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-04-02

  • 博文量
    60
  • 访问量
    254117