现在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. Laravel —— 多模块开发

    Laravel 框架比较庞大,更适用于比较大的项目. 为了整个项目文件结构清晰,不同部分分为不同模块很有必要. 一.安装扩展包 1.根据不同 Laravel 版本,选择扩展包版本. packagest ...

  2. EntityFramework6 学习笔记(三)

    你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除一组记录,如果按照正常的流程 ...

  3. [Algorithm] BFS vs DFS

    //If you know a solution is not far from the root of the tree: BFS, because it is faster to get clos ...

  4. 用OKR提升员工的执行力

    很多管理者在公司管控的过程中常常出现一种乏力的感觉,觉得很多事情推进不下去,结果总是令人不满意.管理者总是会吐槽,“员工执行力差!”而此时大部分管理者会认为公司执行力差是员工能力和态度的问题. 事实上 ...

  5. BZOJ 3672: [Noi2014]购票 树上CDQ分治

    做这道题真的是涨姿势了,一般的CDQ分治都是在序列上进行的,这次是把CDQ分治放树上跑了~ 考虑一半的 CDQ 分治怎么进行: 递归处理左区间,处理左区间对右区间的影响,然后再递归处理右区间. 所以, ...

  6. Windbg妙用

    计算器 当你在调试,需要做一些从十六进制到十进制的简单转换,一些整数计算你不需要切换到calc.exe,你可以只使用windbg的表达式计算器.假设你得到了一个十六进制的大小,比如说2e903000, ...

  7. WinDbg常用命令系列---线程相关操作~*

    ~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...

  8. NuxtJS如何利用axios异步请求

    第一种:使用nuxt 提供的 Axios插件 @nuxtjs/axios 1.安装:npm install @nuxtjs/axios -d 2.配置 nuxt.config.js exports d ...

  9. xmind 破解

    邮箱:x@iroader 序列号: XAka34A2rVRYJ4XBIU35UZMUEEF64CMMIYZCK2FZZUQNODEKUHGJLFMSLIQMQUCUBXRENLK6NZL37JXP4P ...

  10. Linux基础及常用指令

    1.Linux目录结构 bin(usr/bin,user/local/bin) #存放常用指令,如cp.cat.chown等 sbin(usr/sbin,user/local/sbin) #高权限指令 ...