现在mysql相关的面试,面试官总会问一些相关的技术问题。在这里,因此就总结一些常见的mysql面试题,都是自己平时工作的总结以及经验。希望大家看完,能避开”面试坑”。

1、MySQL主从复制的原理。

(1)、主库必须开启二进制日志

(2)、当有增删改的语句时,会记录到主库的binlog中

(3)、主库通过IO线程把binlog里面的内容传给从库的relay binlog(中继日志)(这是msyql复制是异步复制的原因)

(4)、从库的sql线程负责读取它的relay log里的信息并应用到数据库中 2、Seconds_Behind_Master的原理。

表示sql线程和io线程之间的时间差 具体的计算:从库服务器当前的时间戳与二进制日志中的事件的时间戳相对比得到的,所以只有在执行事件时才能报告延迟。 不足: 一些错误(例如主备的max_allowed_packet不匹配,或者网络不稳定)可能中断复制,由于主从复制是异步操作,Seconds_Behind_Master可能显示为0 3、主从延迟的主要原因有哪些?

(1)、慢SQL语句过多

(2)、从库的硬件比主库差

(3)、同一个主库下有过多的从库

(4)、网络延迟

(5)、表分区过多 (还有一些原因,欢迎补充)

4、MySQL常见存储引擎及各自特点。

(1)、InnoDB 支持事务、行级锁、支持外键约束,主要面向OLTP的应用,使用next-key locking 的策略来避免幻读现象的产生. (2)、MyISAM 不支持事务、表锁设计、支持全文索引、读写互相阻塞、不支持外键约束;主要面向OLAP应用场景;缓存池只缓存索引文件,不缓存数据文件 (3)、Memory 将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。如果数据库重启或者奔溃,数据都将丢失。 (4)、TokuDB 支持事务、高压缩、告诉读写、基于稀疏树索引设计;支持大多数在线修改索引、添加字段。 (5)、Inforbright/infinidb 列式存储、高压缩、单列查询快 5、innodb_flush_log_at_trx_commit参数0、1和2分别代表什么? innodb_flush_log_at_trx_commit参数可以控制将redo log buffer中的更新记录写入到日志文件以及日志文件刷新到磁盘的操作时机。

0 每秒一次触发log buffer写入log file中,并且log file刷新到磁盘。 (由于进程调度问题,不能保证每秒100%刷新;如果mysql进程崩溃,可能会丢失1s的事务;效率最高,但最不安全) 1 每次事务提交触发log buffer写入log file中,并且log file刷新到磁盘。 2 每次事务提交,log buffer写入log file中;每秒log file刷新到磁盘。 (如果操作系统崩溃或者停电,可能会丢失1s的事务) 6、Mysql中varchar和char的区别 CHAR列的长度固定为创建表时声明的长度,范围(0-255) VARCHAR列的长度不固定,范围(0-65535) 7、varchar(50)中的50代表的含义、int(20)中20的含义。 varchar(50)中的50代表最多能存放50个字符 int(20)中20的含义表示显示宽度,跟着zerofill一起才有意义 8、MySQL binlog的几种日志录入格式的涵义、适用场景和在复制中的优劣。 (1)、statement level模式 每一条会修改数据的sql都会记录到master的binlog中,slave在复制时sql进程会解析成和原来master端执行过的相同的sql再次执行。 适用场景:对主从数据一致性要求不太高,并且很少用到函数、存储过程、触发器等场景 优点:bin-log日志量少 缺点:部分新功能(函数、存储过程、触发器)同步会有障碍,比如now() (2)、row level模式 日志中会记录成每一行数据被修改的形式,然后再slave端再对相同的数据进行修改 适用场景:对主从数据一致性要求比较高的场景。 优点:记录的详细 缺点:binlog日志量过大 (3)、mixed模式

MySQL默认采用statement格式进行二进制日志文件的记录,但是在一些情况下会使用row格式,可能的情况有: 1)、表的存储引擎为NDB,此时对表的DML操作都会以ROW格式记录 2)、使用了UUID(),USER(),CURRENT_USER(),FOUND_ROWS(),ROW_count()等不确定函数时 3)、使用了insert delay语句 4)、使用了用户定义函数(UDF) 5)、使用了临时表 适用场景:对主从数据一致性要求不太高,可能会用到函数、存储过程、触发器等场景 优缺点介于statement和row模式之间 9、重做日志和二进制日志的区别(至少三点) (1)涉及存储引擎不一样: binlog记录的是所有存储引擎的操作记录 redo log只记录innodb存储引擎的日志 (2)记录内容不一样: binlog记录的是关于一个事务的具体操作内容。为逻辑日志 而redo log记录的是每个页更改的物理情况 (3)写的时间不一样: binlog文件仅在事务提交前进行提交,即只写磁盘一次 而在事务进行过程中,却不断有重做日志条目被写入到重做日志文件中。 10、Explain执行计划中要关注哪些要素?

(1)、type:本次查询表联接类型,从这里可以看到本次查询大概的效率

(2)、key:最终选择的索引,如果没有索引的话,本次查询效率通常很差

(3)、key_len:本次查询用于结果过滤的索引实际长度

(4)、rows:预计需要扫描的记录数,预计需要扫描的记录数越小越好

(5)、extra:额外附加信息,主要确认是否出现 Using filesort、Using temporary 类似情况

以上问题,都是面试中经常会被问到的!其实要想把这些问题具体的原理讲清楚,那每一个问题都可以啰嗦出一篇文章来!所以,在这里我没有进行深入的探讨。只是把工作中自己的一些经验分享了出来,有可能你会觉得,就是这样做的,不这么做可能就会掉坑里去。当然,我给的回答可能并非标准答案,毕竟是自己的一些经验总结,希望能对大家的面试有一些帮助!

MySQL面试题看这一篇就够了的更多相关文章

  1. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  2. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  3. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

  4. Java中的多线程=你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  5. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  6. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了

    title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...

  7. 鸿蒙应用程序Ability(能力)看这一篇就够

    本节概述 什么是Ability Ability分类 Ability生命周期 Ability之间跳转 什么是Ability Ability意为能力,是HarmonyOS应用程序提供的抽象功能.在Andr ...

  8. windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看

    windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...

  9. 什么是 DevOps?看这一篇就够了!

    本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...

随机推荐

  1. K-means:如何选择K(cluster的数目)

    目前决定cluster数目的常用方法是手动地决定cluster的数目 哪个K是正确的? 上图中的数据集,我们可以说它有4个clusters,也可以说它有2个clusters,但哪个是正确答案呢?其实这 ...

  2. Dubbo源码分析:Invoker

    背景 调用对象!在调用过程可以使用Filter接口方法.Inovoker调用过程采用了装饰者设计模式.Filter最后一个ExcpetionFilter对象,这个对象之后就调用服务方法.服务对象是配置 ...

  3. SOA与ESB,微服务与API网关

    SOA与ESB,微服务与API网关 SOA: ESB: 微服务: API网关: 参考资料: 1.漫画微服务,http://www.sohu.com/a/221400925_100039689 2.SO ...

  4. Build Post Office

    Description Given a 2D grid, each cell is either an house 1 or empty 0 (the number zero, one), find ...

  5. tensorflow2.0 学习(三)

    用tensorflow2.0 版回顾了一下mnist的学习 代码如下,感觉这个版本下的mnist学习更简洁,更方便 关于tensorflow的基础知识,这里就不更新了,用到什么就到网上取搜索相关的知识 ...

  6. C# 读取Excel 单元格是日期格式

    原文地址:https://www.cnblogs.com/liu-xia/p/5230768.html DateTime.FromOADate(double.Parse(range.Value2.To ...

  7. 洛谷P1854 花店橱窗布置

    题目 DP,直接递推比记忆化搜索简单. 定义状态\(dp[i][j]\)为前i行最后一个选择第i行第j个数所得到最大值. 易得状态转移方程 \(dp[i][j]=max(dp[i-1][k]+a[i] ...

  8. shell脚本编程基础之case语句

    基础简介 脚本编程分为: 面向过程 选择结构:if语句,单分支.双分支.多分支:case语句 控制结构:顺序结构(默认) 循环结构:for.while.until 面向对象 case语句结构 case ...

  9. Java串口通信--------基于RXTX (附带资源地址)

    最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...

  10. 测试linux下磁盘的读写速率

    1) 通过df -h命令查看磁盘情况 Filesystem            Size  Used Avail Use% Mounted on/dev/sda4             289G  ...