MySQL高频面试题

news2025/7/16 8:32:51

1. drop,delete和truncate删除数据的区别?


delete 语句执行删除是每次从表中删除一行,并且同时将改行的删除操作作为事务记录在日志中保存以便进行回滚。
truncate 则是一次从表中删除所有的数据并不把单独的删除操作记录计入日志,删除行是不能恢复的。执行速度很快
drop 是将表所占的空间全部释放掉。
在删除速度上, drop>truncate>delete
想要删除部分数据用delete,想要删除表用drop。 想保留表但是把数据删除,如果和事务无关用truncate


2. MySQL主从原理

从库生成两个线程,一个I/O线程,一个SQL线程;

i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

3. MySQL主从复制存在哪些问题?


mysql主从复制存在的问题:主库宕机后,数据可能丢失,从库只有一个sql Thread,主库写压力大,复制很可能延时。

解决方法: 用半同步复制解决数据丢失的问题
用并行复制解决从库复制延迟的问题。

4. MySQL复制的方法


级联复制:将主库的数据同步到级联库,然后级联库把自己的数据同步到从库上,这样可以减少主库的压力


半同步复制:
默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主库或从库发生故障时,有可能从库没有接收到主库发送过来的binlog日志,这就会造成主库和从库的数据不一致,甚至在恢复时造成数据的丢失。

在开启了半同步复制机制后,主库只有当有任意一台从库已经接收到主库的数据后,告诉主库。主库收到从库同步成功的信息后,才继续后面的操作。

5. 主从延迟产生的原因及解决方案?


主库的并发比较高的时候,产生的DDL数量超过了从库的一个sql线程所承受的范围,那么延时就产生了。
还有可能是与从库的大型query语句产生的了锁等待 。


网络抖动
解决方案:


1)、架构方面

1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。

2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。

4.不同业务的mysql物理上放在不同机器,分散压力。

5.使用比主库更好的硬件设备作为slave总结,mysql压力小,延迟自然会变小。

2)、mysql主从同步加速

1、sync_binlog在slave端设置为0

2、–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。

3、直接禁用slave端的binlog

6. 判断主从延迟的方法


可以通过命令 show slave status 查看

比如通过seconds_behind_master的值来判断
NULL - 表示io_thread或是sql_thread有任何一个发生故障,也就是该线程的Running状态是No,而非Yes.
0 - 该值为零,是我们极为渴望看到的情况,表示主从复制状态正常

7. MySQL忘记root密码如何找回


在配置文件里加上skip-grant-tables ,重启MySQL
使用MySQL-uroot -p 进入
使用update 修改密码

mysql> USE mysql ;
mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;


8. MySQL的数据备份方式


工具一 MySQLdump工具备份
工具二: xtrabackup工具备份

备份分为:冷备,温备和热备

根据要备份的数据集合又分为: 完全备份,增量备份和差异备份

需要备份的对象:

  • 数据
  • 配置文件
  • OS相关的配置文件
  • 代码: 存储过程,存储函数和处罚器
  • 复制相关的配置
  • 二进制日志

数据量比较大的时候用xtrabackup

基于MySQLdump做备份策略: 周日做全备,备份同时滚动日志
周一到周六:备份二进制文件

恢复的时候: 完全备份 + 二进制文件中到此处的事件

xtrabackup的特点:

         1) 备份过程快速、可靠;

          2) 备份过程不会打断正在执行的事务;

          3) 能够基于压缩等功能节约磁盘空间和流量;

          4) 自动实现备份检验;

          5) 还原速度快;

逻辑备份: 类似于select * from 查询满足条件的备份
物理本分: 备份文件+日志文件
所以xtrabackup就是物理备份
MySQLdump就是逻辑备份

9. innodb的特性


一:插入缓冲

二:二次写

三:自适应哈希

四:预读

10. varchar(100) 和varchar(200)的区别


varchar(100)最多存放100个字符,varchar(200)最多存放200个字符,varchar(100)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样

11. MySQL主要的索引类型


普通索引:是最基本的索引,它没有任何限制;

唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;

主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;

组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;

全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysql中MyISAM支持全文索引而InnoDB不支持;

12. 请说出非关系型数据库的典型产品、特点及应用场景?

MongoDB


特点:

        1.高性能,易部署,易使用。
        2.面向集合存储,易存储对象类型的数据。
        3.模式自由
        4.自动处理碎片,以支持云计算层次的扩展性。
应用场景:
        网站数据:mongodb非常适合实时的插入,更新与查询。
        缓存:适合作为信息基础设施的缓存层
        大尺寸、低价值的数据
        高伸缩性的场景

Redis

特点:

        1.性能极高,能支持超过100k+每秒的读写频率
        2.丰富的数据类型
        3.所有操作都是原子性的
使用场景:
        少量的数据存储,高速读写访问


SQLlite

特点:

  1. 嵌入式的,零配置,无需安装和管理配置
  2. ACID事务
  3. 存储在单一磁盘文件中的一个完整的数据库。

应用场景:

  • 1.需要数据库的小型桌面软件。
  • 2.需要数据库的手机软件。
  • 3.作为数据容器的应用场景。

13. 如何加强MySQL安全,请给出可行的具体措施?


1.避免直接从互联网访问mysql数据库,确保特定主机才拥有访问权限。
2.定期备份数据库
3.禁用或限制远程访问
在my.cnf文件里设置bind-address指定ip
4.移除test数据库(默认匿名用户可以访问test数据库)
5.禁用local infile
mysql> select load_file(“/etc/passwd”);
在my.cnf里[mysqld]下添加set-variable=local-infile=0
6.移除匿名账户和废弃的账户
7.限制mysql数据库用户的权限
8.移除和禁用.mysql_history文件

14. Binlog工作模式有哪些?各什么特点,企业如何选择?
1.row level行级模式

优点:记录数据详细(每行),主从一致
缺点:占用大量的磁盘空间,降低了磁盘的性能

2.statement level模式(默认)

优点:记录的简单,内容少 ,节约了IO,提高性能 缺点:导致主从不一致

3.MIXED混合模式

结合了statement和row模式的优点,会根据执行的每一条具体的SQL语句来区分对待记录的日志形式。对于函数,触发器,存储过程会自动使用row level模式
企业场景选择:
1.互联网公司使用mysql的功能较少(不用存储过程、触发器、函数),选择默认的statement模式。
2.用到mysql的特殊功能(存储过程、触发器、函数)则选则MIXED模式
3.用到mysql的特殊功能(存储过程、触发器、函数),有希望数据最大化一致则选择row模式。

15. 生产一主多从从库宕机,如何手工恢复?


处理方法:重做slave

  •   停止slave
  •   导入备份数据
  •   配置master.info信息
  •   启动slave
  •   检查从库状态

16. MySQL中MyISAM与InnoDB的区别,至少5点

a. InnoDB支持事务,而MyISAM不支持事务。
b. InnoDB支持行级锁,而MyISAM支持表级锁
c. InnoDB支持MVCC,而MyISAM不支持
d. InnoDB支持外键,而MyISAM不支持
e. InnoDB不支持全文索引,而MyISAM支持

17. 网站打开慢,请给出排查方法,如是数据库慢导致,如何排查并解决,请分析并举例?

  检查操作系统是否负载过高
  登陆mysql查看有哪些sql语句占用时间过长,show processlist;
  用explain查看消耗时间过长的SQL语句是否走了索引
  对SQL语句优化,建立索引

18. xtrabackup的备份,增量备份及恢复的工作原理


XtraBackup基于InnoDB的crash-recovery功能,它会复制InnoDB的data file,由于不锁表,复制出来的数据是不一致的,在恢复的时候使用crash-recovery,使得数据恢复一致。
InnoDB维护了一个redo log,又称为transaction log(事务日志),它包含了InnoDB数据的所有改动情况。当InnoDB启动的时候,它会先去检查data file和transaction log,并且会做两步操作:
XtraBackup在备份的时候,一页一页的复制InnoDB的数据,而且不锁定表,与此同时,XtraBackup还有另外一个线程监视着transaction log,一旦log发生变化,就把变化过的log pages复制走。为什么要着急复制走呢?因为transaction log文件大小有限,写满之后,就会从头再开始写,所以新数据可能会覆盖到旧的数据。
在prepare过程中,XtraBackup使用复制到的transaction log对备份出来的InnoDB data file进行crash recover

19.误执行drop数据,如何通过xtrabackup恢复?

关闭mysql服务
移除mysql的data目录及数据
将备份的数据恢复到mysql的data目录
启动mysql服务

20. 如何做主从数据一致性校验?


主从一致性校验有多种工具 例如checksum、mysqldiff、pt-table-checksum等

21. MySQL有多少日志


错误日志:记录出错信息,也记录一些警告信息或者正确的信息。

查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。

慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。

二进制日志:记录对数据库执行更改的所有操作。

中继日志。

事务日志。
le/details/111957929

22. MySQL binlog的几种日志录入格式以及区别

1.Statement:每一条会修改数据的sql都会记录在binlog中。

优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能 与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条 件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所 产生的日志量会增加多少,以及带来的IO性能问题。)
缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的 一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).
使用以下函数的语句也无法被复制:

LOAD_FILE()
UUID()
USER()
FOUND_ROWS()
SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)
同时在INSERT …SELECT 会产生比 RBR 更多的行级锁

2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。

优点: binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下 每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题
缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比 如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。

3.Mixedlevel: 是以上两种level的混合使用,

一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则 采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择 一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。

23. MySQL数据库cpu飙升到500%的话他怎么处理?

当 cpu 飙升到 500%时,先用操作系统命令 top 命令观察是不是 mysqld 占用导致的,如果不是,找出占用高的进程,并进行相关处理

如果是 mysqld 造成的, show processlist,看看里面跑的 session 情况,是不是有消耗资源的 sql 在运行。找出消耗高的 sql,
看看执行计划是否准确, index 是否缺失,或者实在是数据量太大造成。

一般来说,肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降),等进行相应的调整(比如说加索引、改 sql、改内存参数)之后,再重新跑这些 SQL。

也有可能是每个 sql 消耗资源并不多,但是突然之间,
有大量的 session 连进来导致 cpu 飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/8331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详述分布式事务Seata TCC空回滚/幂等/悬挂问题、解决方案(seata1.5.1如何解决?)

文章目录一、前言二、问题介绍、seata1.5.1版本之前的解决方案1、空回滚出现原因解决措施事务控制记录表try()、cancel()中获取xid、branch_id2、幂等出现原因解决措施事务控制记录表3、悬挂出现原因解决措施4、总述最终的事务控制记录表三、seata1.5.1版本起官方提供的解决措施…

[附源码]java毕业设计基于Java烟支信息管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

前端框架 网络请求 Fetch Axios

目录 一、Fetch请求的使用 1、 Fetch官网 2、基本案例 二、跨域请求解决 三、Axios的使用 1、Axios官网 2、基本使用 推荐使用Axios更方便! 一、Fetch请求的使用 1、 Fetch官网 使用 Fetch - Web API 接口参考 | MDN 2、基本案例 二、跨域请求解决 &…

2023第二届中国能源管理碳中和国际峰会

峰会背景 应对气候变化已经成为21世纪人类社会面临的紧迫挑战,推进绿色发展成为全球共识。中国积极参与和引导应对气候变化国际合作,向世界作出“力争2030年前实现碳达峰、2060年前实现碳中和”的承诺,逐步完善碳达峰碳中和“1N”政策体系&a…

史上最全安装Maven教程一看就会吊炸天的教程

史上最全安装Maven教程 简单了解一下什么是Maven 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一个项目管理工具软件,可以通过简短的中央信息描述…

LeetCode第 319 场周赛题解

目录2469. 温度转换2470. 最小公倍数为 K 的子数组数目2471. 逐层排序二叉树所需的最少操作数目2472. 不重叠回文子字符串的最大数目2469. 温度转换 模拟 class Solution { public:vector<double> convertTemperature(double celsius) {return {celsius273.15,celsius*1…

前端面试中小型公司都考些什么

什么是物理像素&#xff0c;逻辑像素和像素密度&#xff0c;为什么在移动端开发时需要用到3x, 2x这种图片&#xff1f; 以 iPhone XS 为例&#xff0c;当写 CSS 代码时&#xff0c;针对于单位 px&#xff0c;其宽度为 414px & 896px&#xff0c;也就是说当赋予一个 DIV元素…

Ubuntu20.04 中已经安装 Pytorch 但 Import 报错 - 解决记录

01 问题描述 笔者使用的是 Ubuntu 20.04.3 LTS&#xff0c;在使用 PyTorch 训练模型的时候&#xff0c;torch 模块引用失败&#xff0c;报错信息是 OSError: /home/wang/.local/lib/python3.8/site-packages/torch/lib/../../nvidia/cublas/lib/libcublas.so.11: undefined s…

C++对象和类概述

11 对象和类 11.1 过程式和面向对象编程 面向过程编程&#xff1a;先考虑函数&#xff0c;然后再细化到数据 面向对象编程&#xff1a;对象&#xff08;数据函数&#xff09; 11.2 抽象和类 在计算中&#xff0c;抽象是根据与用户的接口来表示信息的关键步骤。 11.2.1 什…

QT默认自带mscv2017 2019 ,配置vs2022

试验QT版本&#xff1a;5.14.2 所需文件&#xff1a; QT安装程序--qt-opensource-windows-x86-5.14.2.exe具体地址是&#xff1a;Index of /archive/qthttps://download.qt.io/archive/qt/Microsoft 生成工具 2022 Visual Studio 2022 IDE - 适用于软件开发人员的编程工具win…

Cholesterol胆固醇参数说明及相关研究

Cholesterol胆固醇是哺乳动物细胞中产生的一种主要甾醇&#xff0c;是细胞存活和增殖所必需的。它是哺乳动物细胞膜的一种成分&#xff0c;与膜磷脂、鞘脂和蛋白质相互作用&#xff0c;影响它们的行为。它也是各种基于脂质的药物递送&#xff08;LBDD&#xff09;系统的组成部分…

[oeasy]python0015_十六进制_hexadecimal_字节形态_hex函数

十六进制(hexadecimal) 回忆上次内容 上次数制可以转化 bin(n)可以把数字转化为 ​​2进制​ binary接收一个整数(int)得到一个二进制数形式的字符串数字在计算机中是用二进制存储的 但是展示给我们的时候用的是十进制也就是0-9这10个字符的形式都说字节是计算机存储的最小单…

基于微信小程序的自习室预约系统设计与实现-计算机毕业设计源码+LW文档

小程序开发说明 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

Me-Tetrazine-DBCO,1802908-04-8,ICG-Tetrazine四嗪类试剂知识分享

Me-Tetrazine-DBCO&#xff0c;Methyltetrazine-PEG4-azide&#xff0c;ICG-Tetrazine这几种试剂都含有四嗪&#xff0c;或者甲基四嗪&#xff0c;其主要的性能特点有哪些&#xff1f;西安凯新生物是国内业PEG供应商&#xff0c;其中包括各种规格的点击试剂&#xff0c;&#x…

nvm (node 版本管理器)

ps: 如果已经安装node&#xff0c;或者nvm&#xff0c;先卸载&#xff0c;再执行下面操作。 1. 下载nvm nvm github 下载后以管理员身份运行 setup.exe 安装就根据步骤点下一步就行了 2. 安装node nvm基础操作 使用 nvm install node版本号&#xff0c;但是这里有时候会报…

[附源码]java毕业设计基于的城镇住房公积金管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Vue项目实战

Vue项目实战 1、项目介绍 1.1、对象 有Vue2、Vue3组合api基础知识&#xff0c;TypeScript基础知识1.2、涉及技术 CSS3 TypeScript Vue3.2 Vuex4.x Vue Router4.x Vite2.x Element-Plus1.3、技能 掌握Vue3.2语法糖的使用掌握Vue3中组合api的使用掌握组件中业务逻辑抽离的方…

第七章 Java编程-多线程

线程几乎在每个编程语言中都有&#xff0c;它其实是操作系统的概念&#xff0c;编程语言是运行在操作系统上的

RK3568平台开发系列讲解(图像篇)BMP图像处理

🚀返回专栏总目录 文章目录 一、BMP文件格式解析1.1、位图文件头(bitmap-file header)1.2、位图信息头(bitmap-information header)二、LCD上显示代码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢我们今天来讲解BMP文件格式的解析。 一、BMP文件格式解析 BMP是一…

发那科机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认&#xff1a; 此系统为&#xff1a;0I-TD 注&#xff1a;凡是系统中带i的&#xff0c;基本上都有网络通讯和采集功能。如果系统中带有mate字样&#xff0c;并且比较老可能不含网口。 2、确认通讯接口 发那科的通讯接口有两种…