MySQL面试题
MySQL基础知识
版本与安装
- 你们MySQL是什么版本?为什么选择这个版本?
- MySQL 5.6、5.7、8.0的主要区别和新特性?
- MySQL端口号是多少?如何修改默认端口?
- MySQL安装方式有哪些?各自的优缺点?(二进制、源码编译、rpm/deb包)
- MySQL如何升级?有几种升级方式?需要注意什么?
- MySQL配置文件my.cnf的常用配置项有哪些?
存储引擎
- MySQL有哪些存储引擎?各自的特点和使用场景?
- InnoDB和MyISAM的区别?
- 如何查看和修改表的存储引擎?
- InnoDB的优势是什么?为什么是默认存储引擎?
数据类型
- MySQL常用的数据类型有哪些?
- char和varchar的区别?如何选择?
- int(10)中的10代表什么意思?
- datetime和timestamp的区别?
- 如何存储金额数据?用什么数据类型?
SQL语句与索引
SQL基础
- SQL语句的分类(DDL、DML、DCL、TCL)?
- drop、delete、truncate的区别?
- count(*)、count(1)、count(字段)的区别?
- having和where的区别?
- union和union all的区别?
- 左连接、右连接、内连接、全连接的区别?
- exists和in的区别?什么时候用哪个?
索引原理与使用
- 什么是索引?索引的作用?
- MySQL索引的数据结构是什么?为什么使用B+树?
- B树和B+树的区别?为什么MySQL选择B+树?
- 聚簇索引和非聚簇索引的区别?
- MySQL索引有哪些类型?
- 什么是覆盖索引?什么是回表?
- 什么是最左前缀原则?
- 索引失效的场景有哪些?
索引优化
- 如何分析SQL是否走了索引?(explain命令)
- explain执行计划的字段含义?重点关注哪些字段?
- 如何选择合适的字段建立索引?
- 索引并不是越多越好,为什么?
- 如何优化慢查询?
- MySQL给你一个数据量1000万的表让你创建索引,你怎么做?
- 什么是索引下推?MySQL 5.6的优化
SQL优化
- 大表查询如何优化?
- 如何优化分页查询?(limit优化)
- 如何优化order by和group by?
- 如何优化子查询?
- 批量插入数据如何优化?
事务与锁
事务基础
- 什么是事务?事务的ACID特性分别是什么?
- MySQL事务的隔离级别有哪些?
- 不同隔离级别会产生什么问题?(脏读、不可重复读、幻读)
- MySQL默认的隔离级别是什么?如何查看和修改?
- MVCC是什么?如何实现的?
- undo log和redo log的作用?
锁机制
- MySQL有哪些锁?(表锁、行锁、间隙锁、临键锁)
- InnoDB的行锁是怎么实现的?
- 什么是死锁?如何避免死锁?
- 如何查看当前的锁信息?
- MySQL出现锁表的情况怎么解决?
- 乐观锁和悲观锁的区别?如何实现?
主从复制与高可用
主从复制
- MySQL主从复制的原理是什么?详细说一下流程
- 主从复制的方式有哪些?(基于binlog位置、基于GTID)
- 什么是GTID?使用GTID的优势?
- binlog的格式有哪些?(statement、row、mixed)各自的优缺点?
- 如何搭建主从复制?具体步骤?
- 主从复制延迟的原因?如何监控和解决?
- 如何判断主从数据是否一致?
高可用架构
- MySQL高可用方案有哪些?(主从、主主、MHA、MGR、PXC)
- MHA的工作原理?自动切换流程?
- MHA故障转移之后,故障节点怎么处理?
- MySQL Group Replication(MGR)了解吗?
- 读写分离的实现方式?使用什么中间件?
- ProxySQL、MaxScale、MyCat的区别?
备份与恢复
备份策略
- MySQL备份方式有哪些?(逻辑备份、物理备份)
- mysqldump和xtrabackup的区别?
- 你们的备份策略是什么?多久备份一次?
- 全量备份和增量备份的区别?如何实现增量备份?
- 如何实现定时自动备份?
- 备份文件如何压缩和加密?
数据恢复
- 如何使用mysqldump备份文件恢复数据?
- 如何使用binlog进行数据恢复?
- 误删除数据如何恢复?(delete、drop)
- 如何恢复到指定时间点?
- 主从切换后如何快速恢复?
性能优化与监控
性能优化
- MySQL性能优化的思路?
- 如何优化MySQL配置参数?重要参数有哪些?
- 如何优化表结构设计?
- 大表如何优化?(分区、分表)
- 如何减少数据库访问?(缓存策略)
慢查询分析
- 如何开启慢查询日志?
- 如何分析慢查询日志?使用什么工具?
- 如何定位和优化慢SQL?
- 你们MySQL如何发现慢SQL?
监控指标
- MySQL需要监控哪些关键指标?
- 如何监控MySQL的连接数?
- 如何监控MySQL的QPS和TPS?
- 如何监控表空间和磁盘使用?
- MySQL的CPU使用率过高怎么排查?
- 如何监控主从延迟?
问题排查
- MySQL数据库响应慢如何排查?
- MySQL连接数过多如何处理?
- MySQL内存使用过高如何排查?
- 如何分析MySQL的死锁问题?
- MySQL启动失败如何排查?
安全管理
权限管理
- MySQL的权限体系是怎样的?
- 如何创建用户和授权?
- grant和revoke命令的使用?
- 如何查看用户权限?
- 最小权限原则如何实施?
安全加固
- MySQL安全需要注意哪些方面?
- 如何限制root远程登录?
- 如何设置密码复杂度策略?
- 如何开启SSL加密连接?
- 如何防止SQL注入?
- 审计日志如何配置?
运维实践
日常运维
- 你们MySQL数据量有多大?最大的表有多少行?
- 如何处理大表?(历史数据归档、分区表)
- 如何在线修改大表结构?(pt-online-schema-change)
- 数据库迁移做过吗?如何保证数据一致性?
- 如何批量导入导出数据?
故障处理
- MySQL主从同步中断如何处理?
- MySQL表损坏如何修复?
- binlog文件损坏如何处理?
- 如何处理MySQL的OOM问题?
- 数据库被误删除如何恢复?
新技术
- 了解过MySQL 8.0的新特性吗?
- 了解过OceanBase吗?如何从MySQL迁移?
- 了解过TiDB吗?和MySQL的区别?
- 云数据库RDS使用过吗?优缺点?
- MySQL和NoSQL如何选择?
更新时间:2025-01-30