跳到主要内容

MySQL面试题

MySQL基础知识

版本与安装

  1. 你们MySQL是什么版本?为什么选择这个版本?
  2. MySQL 5.6、5.7、8.0的主要区别和新特性?
  3. MySQL端口号是多少?如何修改默认端口?
  4. MySQL安装方式有哪些?各自的优缺点?(二进制、源码编译、rpm/deb包)
  5. MySQL如何升级?有几种升级方式?需要注意什么?
  6. MySQL配置文件my.cnf的常用配置项有哪些?

存储引擎

  1. MySQL有哪些存储引擎?各自的特点和使用场景?
  2. InnoDB和MyISAM的区别?
  3. 如何查看和修改表的存储引擎?
  4. InnoDB的优势是什么?为什么是默认存储引擎?

数据类型

  1. MySQL常用的数据类型有哪些?
  2. char和varchar的区别?如何选择?
  3. int(10)中的10代表什么意思?
  4. datetime和timestamp的区别?
  5. 如何存储金额数据?用什么数据类型?

SQL语句与索引

SQL基础

  1. SQL语句的分类(DDL、DML、DCL、TCL)?
  2. drop、delete、truncate的区别?
  3. count(*)、count(1)、count(字段)的区别?
  4. having和where的区别?
  5. union和union all的区别?
  6. 左连接、右连接、内连接、全连接的区别?
  7. exists和in的区别?什么时候用哪个?

索引原理与使用

  1. 什么是索引?索引的作用?
  2. MySQL索引的数据结构是什么?为什么使用B+树?
  3. B树和B+树的区别?为什么MySQL选择B+树?
  4. 聚簇索引和非聚簇索引的区别?
  5. MySQL索引有哪些类型?
  6. 什么是覆盖索引?什么是回表?
  7. 什么是最左前缀原则?
  8. 索引失效的场景有哪些?

索引优化

  1. 如何分析SQL是否走了索引?(explain命令)
  2. explain执行计划的字段含义?重点关注哪些字段?
  3. 如何选择合适的字段建立索引?
  4. 索引并不是越多越好,为什么?
  5. 如何优化慢查询?
  6. MySQL给你一个数据量1000万的表让你创建索引,你怎么做?
  7. 什么是索引下推?MySQL 5.6的优化

SQL优化

  1. 大表查询如何优化?
  2. 如何优化分页查询?(limit优化)
  3. 如何优化order by和group by?
  4. 如何优化子查询?
  5. 批量插入数据如何优化?

事务与锁

事务基础

  1. 什么是事务?事务的ACID特性分别是什么?
  2. MySQL事务的隔离级别有哪些?
  3. 不同隔离级别会产生什么问题?(脏读、不可重复读、幻读)
  4. MySQL默认的隔离级别是什么?如何查看和修改?
  5. MVCC是什么?如何实现的?
  6. undo log和redo log的作用?

锁机制

  1. MySQL有哪些锁?(表锁、行锁、间隙锁、临键锁)
  2. InnoDB的行锁是怎么实现的?
  3. 什么是死锁?如何避免死锁?
  4. 如何查看当前的锁信息?
  5. MySQL出现锁表的情况怎么解决?
  6. 乐观锁和悲观锁的区别?如何实现?

主从复制与高可用

主从复制

  1. MySQL主从复制的原理是什么?详细说一下流程
  2. 主从复制的方式有哪些?(基于binlog位置、基于GTID)
  3. 什么是GTID?使用GTID的优势?
  4. binlog的格式有哪些?(statement、row、mixed)各自的优缺点?
  5. 如何搭建主从复制?具体步骤?
  6. 主从复制延迟的原因?如何监控和解决?
  7. 如何判断主从数据是否一致?

高可用架构

  1. MySQL高可用方案有哪些?(主从、主主、MHA、MGR、PXC)
  2. MHA的工作原理?自动切换流程?
  3. MHA故障转移之后,故障节点怎么处理?
  4. MySQL Group Replication(MGR)了解吗?
  5. 读写分离的实现方式?使用什么中间件?
  6. ProxySQL、MaxScale、MyCat的区别?

备份与恢复

备份策略

  1. MySQL备份方式有哪些?(逻辑备份、物理备份)
  2. mysqldump和xtrabackup的区别?
  3. 你们的备份策略是什么?多久备份一次?
  4. 全量备份和增量备份的区别?如何实现增量备份?
  5. 如何实现定时自动备份?
  6. 备份文件如何压缩和加密?

数据恢复

  1. 如何使用mysqldump备份文件恢复数据?
  2. 如何使用binlog进行数据恢复?
  3. 误删除数据如何恢复?(delete、drop)
  4. 如何恢复到指定时间点?
  5. 主从切换后如何快速恢复?

性能优化与监控

性能优化

  1. MySQL性能优化的思路?
  2. 如何优化MySQL配置参数?重要参数有哪些?
  3. 如何优化表结构设计?
  4. 大表如何优化?(分区、分表)
  5. 如何减少数据库访问?(缓存策略)

慢查询分析

  1. 如何开启慢查询日志?
  2. 如何分析慢查询日志?使用什么工具?
  3. 如何定位和优化慢SQL?
  4. 你们MySQL如何发现慢SQL?

监控指标

  1. MySQL需要监控哪些关键指标?
  2. 如何监控MySQL的连接数?
  3. 如何监控MySQL的QPS和TPS?
  4. 如何监控表空间和磁盘使用?
  5. MySQL的CPU使用率过高怎么排查?
  6. 如何监控主从延迟?

问题排查

  1. MySQL数据库响应慢如何排查?
  2. MySQL连接数过多如何处理?
  3. MySQL内存使用过高如何排查?
  4. 如何分析MySQL的死锁问题?
  5. MySQL启动失败如何排查?

安全管理

权限管理

  1. MySQL的权限体系是怎样的?
  2. 如何创建用户和授权?
  3. grant和revoke命令的使用?
  4. 如何查看用户权限?
  5. 最小权限原则如何实施?

安全加固

  1. MySQL安全需要注意哪些方面?
  2. 如何限制root远程登录?
  3. 如何设置密码复杂度策略?
  4. 如何开启SSL加密连接?
  5. 如何防止SQL注入?
  6. 审计日志如何配置?

运维实践

日常运维

  1. 你们MySQL数据量有多大?最大的表有多少行?
  2. 如何处理大表?(历史数据归档、分区表)
  3. 如何在线修改大表结构?(pt-online-schema-change)
  4. 数据库迁移做过吗?如何保证数据一致性?
  5. 如何批量导入导出数据?

故障处理

  1. MySQL主从同步中断如何处理?
  2. MySQL表损坏如何修复?
  3. binlog文件损坏如何处理?
  4. 如何处理MySQL的OOM问题?
  5. 数据库被误删除如何恢复?

新技术

  1. 了解过MySQL 8.0的新特性吗?
  2. 了解过OceanBase吗?如何从MySQL迁移?
  3. 了解过TiDB吗?和MySQL的区别?
  4. 云数据库RDS使用过吗?优缺点?
  5. MySQL和NoSQL如何选择?

更新时间:2025-01-30