MySQL运维面试题及详细答案(实操版)_第1页
MySQL运维面试题及详细答案(实操版)_第2页
MySQL运维面试题及详细答案(实操版)_第3页
MySQL运维面试题及详细答案(实操版)_第4页
MySQL运维面试题及详细答案(实操版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MySQL运维面试题及详细答案(实操版)一、MySQL基础核心面试题1、简单说下InnoDB和MyISAM的核心区别,工作中怎么选型?参考答案:两者是MySQL最常用的两种存储引擎,核心差异集中在事务、锁、崩溃恢复、性能上:1.事务与日志:InnoDB支持事务、ACID特性,有redo/undo日志,支持崩溃数据恢复;MyISAM不支持事务,无日志机制,宕机容易丢数据、损坏表。2.锁机制:InnoDB是行级锁+表级锁,默认行锁,并发性能高;MyISAM只有全表锁,读写互斥,并发场景极易阻塞。3.外键与索引:InnoDB支持外键、聚簇索引;MyISAM不支持外键,是非聚簇索引。4.缓存:InnoDB缓存数据页+索引页;MyISAM只缓存索引页,数据页靠系统缓存。选型原则:日常业务99%场景用InnoDB,比如订单、用户、交易等需要事务、高并发读写的场景。只有纯静态、只读、低并发的日志表、归档表,才会偶尔用MyISAM。2、MySQL三大日志(redo、undo、binlog)分别是什么作用?参考答案:1.redolog(重做日志):InnoDB专属,核心是保证事务持久性。事务提交后数据不一定立刻刷磁盘,redolog会记录修改操作,数据库宕机重启后,通过redolog重放未落地的数据,保证数据不丢失。解决了事务提交磁盘IO慢的问题。2.undolog(回滚日志):InnoDB专属,核心是保证事务原子性+实现MVCC。记录数据修改前的快照,事务回滚时,通过undolog恢复数据;同时为读写分离、快照读提供历史数据版本。3.binlog(二进制日志):MySQL服务层日志,所有存储引擎都能使用。核心作用是数据备份恢复、主从复制。记录所有对数据库的增删改操作,主库通过binlog同步数据到从库,误删数据也可通过binlog回滚恢复。3、MySQL有哪些常用数据类型?int(11)和int(3)有什么区别?参考答案:常用类型:数值型(int、bigint、tinyint、float、decimal)、字符串(varchar、char、text)、时间(datetime、timestamp、date)。int(11)和int(3)存储和取值范围完全一致,没有任何性能、存储差异。括号内的数字代表显示宽度,仅用于客户端展示补零,不限制存储长度。日常开发不用刻意设置,默认即可。很多新人会误以为是存储位数,这是常见误区。4、varchar和char的区别?工作中如何选择?参考答案:1.存储方式:char是固定长度,定义多长就占多大空间;varchar是可变长度,存多少数据占多少空间,额外多1-2字节记录长度。2.性能:char读写效率更高,无需计算长度;varchar会有少量性能损耗,但节省存储空间。3.尾部空格:char会自动截断尾部空格,varchar保留空格。选型:固定长度数据用char,比如手机号、身份证号、性别;长短不一的字符串用varchar,比如用户名、备注、地址。二、索引核心面试题(高频)1、InnoDB索引结构是什么?为什么用B+树不用B树、哈希?参考答案:InnoDB索引默认是B+树结构。1.对比B树:B+树所有数据都存在叶子节点,非叶子节点只存索引键,内存能缓存更多索引,减少磁盘IO;B树非叶子节点也存数据,节点存储的索引少,IO次数更多。同时B+树叶子节点有序链表,范围查询、排序、分页效率极高。2.对比哈希索引:哈希索引等值查询快,但不支持范围查询、排序、模糊查询,哈希冲突会导致性能下降,且无法利用索引排序,业务场景适配性极差,所以InnoDB默认不用。2、聚簇索引和非聚簇索引的区别?回表是什么?参考答案:1.聚簇索引:InnoDB主键索引就是聚簇索引,叶子节点直接存储整行数据,一张表只能有一个聚簇索引。2.非聚簇索引(二级索引):普通索引、唯一索引都属于此类,叶子节点只存储索引列+主键ID,不存完整数据。3.回表:通过二级索引查询时,只能拿到主键ID,需要再通过主键ID走聚簇索引查询完整行数据,这个二次查询的过程就是回表,会增加SQL执行耗时。3、什么是覆盖索引?如何避免回表?参考答案:覆盖索引就是查询的所有字段,都包含在索引列中,不需要回表查询整行数据。例如:建立索引idx_name_age(name,age),执行selectname,agefromuserwherename='test',直接从二级索引就能拿到全部数据,无需回表,执行效率极高。优化核心:日常写SQL尽量做到索引覆盖查询字段,减少回表开销,是日常慢SQL优化的常用手段。4、最左前缀原则是什么?哪些情况会导致索引失效?参考答案:最左前缀原则:联合索引遵循从左到右匹配的规则,比如索引(a,b,c),查询条件带a、a+b、a+b+c可以走索引;只带b、c、b+c无法走索引。常见索引失效场景:1.联合索引不满足最左前缀;2.索引列使用函数、运算、类型转换,比如left(name,2)、age+1、字符串和数字混用;3.like以%开头模糊查询,如%test、%test%;4.or连接的字段有未索引列;5.MySQL优化器判断全表扫描比索引更快,自动放弃索引(数据量少、索引区分度低时常见)。三、事务与锁机制面试题1、MySQL事务四大特性ACID分别是什么?参考答案:A(原子性):事务要么全部执行成功,要么全部回滚,不会出现部分执行的情况;C(一致性):事务执行前后,数据库数据状态合法、一致,不会出现数据错乱;I(隔离性):多个事务并发执行时,互相不干扰,各自独立运行;D(持久性):事务提交成功后,数据永久落地,即使宕机也不会丢失。2、MySQL四个事务隔离级别?默认级别是什么?分别解决什么问题?参考答案:隔离级别从低到高:1.读未提交:能读到其他事务未提交的数据,会出现脏读、不可重复读、幻读,基本不用;2.读已提交:只能读到其他事务已提交数据,解决脏读,存在不可重复读、幻读;3.可重复读(InnoDB默认):同一个事务内多次查询结果一致,解决脏读、不可重复读,存在幻读;4.串行化:事务串行执行,完全解决三类问题,但并发性能极差,极少使用。日常生产默认使用可重复读,兼顾数据一致性和并发性能。3、脏读、不可重复读、幻读的区别?参考答案:1.脏读:一个事务读到了另一个事务未提交的修改数据,数据是无效的;2.不可重复读:同一个事务内,两次查询同一数据,结果不一致(其他事务中途修改并提交);3.幻读:同一个事务内,两次范围查询,结果行数不一致(其他事务新增/删除数据并提交)。4、InnoDB行锁、表锁、间隙锁、临键锁分别是什么?什么时候触发?参考答案:1.表锁:锁定整张表,开销小、并发低。无索引、索引失效、altertable修改表结构时触发;2.行锁:锁定单行数据,并发高。精准命中索引、等值查询时触发,只锁对应数据行;3.间隙锁:锁定索引数据之间的空隙,防止其他事务插入数据,解决幻读,可重复读级别下生效,范围查询、未命中数据的等值查询会触发;4.临键锁:行锁+间隙锁,锁定当前数据行和前后间隙,是InnoDB默认的锁机制,彻底杜绝幻读问题。四、慢SQL优化与运维优化1、日常如何排查慢SQL?完整流程是什么?参考答案:我日常排查慢SQL有一套固定流程,高效落地:1.开启慢查询日志,设置阈值(生产一般设置1秒),记录执行超时的SQL;2.通过mysqldumpslow工具分析慢日志,统计高频、耗时最高的SQL;3.对目标SQL执行explain,查看执行计划,重点关注type、key、rows、Extra字段;4.定位问题:是否无索引、索引失效、回表过多、全表扫描、排序分页耗时高;5.针对性优化,优化后压测验证性能,观察线上监控。2、explain执行计划重点字段怎么看?参考答案:核心看4个字段:1.type:查询类型,优先级system>const>eq_ref>ref>range>index>all,出现all就是全表扫描,必须优化;2.key:实际命中的索引,为null说明未走索引;3.rows:扫描的数据行数,数值越大效率越低;4.Extra:包含Usingfilesort(文件排序,需优化)、Usingtemporary(临时表,需优化)、Usingindex(覆盖索引,最优)。3、大表优化有哪些方案?参考答案:单表数据量超过千万级就需要优化,常用方案:1.索引优化:删除无效索引、优化联合索引、建立覆盖索引,避免全表扫描;2.分表:水平分表(按时间、ID分片)、垂直分表(冷热数据拆分、大字段拆分);3.分区表:按时间分区,适合日志、流水类数据;4.数据归档:定期归档历史冷数据,减少表数据量;5.读写分离:读请求走从库,分担主库压力。4、MySQL最大连接数爆满怎么办?参考答案:1.临时解决:登录数据库执行setglobalmax_connections=1000,临时调高连接数,恢复业务;2.排查根源:通过showprocesslist查看阻塞线程、慢SQL,杀掉长时间未释放的连接;3.优化配置:调整wait_timeout、interactive_timeout,自动回收空闲连接;4.架构优化:开启连接池、读写分离,避免单库连接打满。五、主从复制与集群运维1、MySQL主从复制原理是什么?参考答案:主从复制分为三个核心步骤:1.主库写入数据后,将操作记录到binlog二进制日志中;2.从库开启IO线程,主动连接主库,拉取主库binlog日志,写入本地relaylog中继日志;3.从库开启SQL线程,读取本地中继日志,重放SQL语句,实现从库数据和主库同步。2、主从延迟的原因和解决方案?参考答案:常见原因:1.主库写入压力大,binlog生成速度超过从库重放速度;2.从库硬件配置低于主库,CPU、磁盘IO性能不足;3.大事务、批量写入,单条SQL操作数据量过大;4.从库存在慢SQL、锁等待,阻塞日志重放。解决方案:1.拆分大事务,避免批量一次性写入;2.优化从库慢SQL,提升重放效率;3.开启并行复制,提升从库SQL线程并发能力;4.升级从库硬件,保证主从配置一致;5.业务规避:核心实时读走主库,非实时读走从库。3、主从数据不一致如何排查修复?参考答案:1.排查:通过mysqldiff、pt-table-checksum工具对比主从库表数据,定位不一致的库、表、数据行;2.临时修复:通过pt-table-sync工具同步差异数据,快速恢复一致;3.彻底修复:停机锁库,备份主库数据,重新导入从库,重建主从关系;4.规避问题:开启binlog_row模式,减少主从不一致概率,禁止在从库执行写操作。六、故障排查与日常运维1、MySQL宕机常见原因及排查思路?参考答案:常见原因:内存溢出、磁盘满、配置参数不合理、大事务、磁盘IO异常、服务器资源耗尽。排查思路:优先查看error错误日志,定位宕机时间和报错信息;查看服务器监控(CPU、内存、磁盘、IO);排查宕机前是否有大SQL、大事务、批量操作;核对f配置是否超出服务器负载。2、磁盘满导致MySQL无法启动怎么处理?参考答案:1.清理无用日志、临时文件、过期备份,释放磁盘空间,优先保证服务可启动;2.不要直接删除正在写入的binlog、redo日志,容易导致数据库损坏;3.启动数据库后,优化日志过期时间,设置binlog自动清理,定期归档数据;4.扩容磁盘,避免后续再次出现磁盘爆满问题。3、误删数据如何恢复?参考答案:1.立刻停止数据库写入,避免新数据覆盖日志;2.找到误操作时间段的binlog日志,通过mysqlbinlog工具解析日志;3.结合全量备份+增量binlog,恢复删除的数据;4.恢复优先在测试库验证,确认数据无误后再同步到生产库。日常运维必须开启binlog,同时定期做全量备份,保证可追溯、可恢复。七、高阶面试题1、MVCC多版本并发控制原理?参考答案:MVCC是InnoDB实现高并发、无锁读的核心机制,主要依靠undolog、readview实现,适用于可重复读、读已提交隔离级别。核心原理:普通select查询是快照读,不会加锁,会读取数据的历史版本。每次查询生成readview视图,通过视图对比数据的事务ID,判断当前数据版本是否可见,不可见则通过undolog回溯上一个历史版本,直到找到可见数据。优势:大幅提升并发读写性能,读写不阻塞,是InnoDB高并发的核心基础。2、为什么不建议使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论