主要整理问题。
一、日志
1、 MySQL中有哪些日志?对应的功能
2、redolog(物理日志)记录的内容是什么?有什么作用?
3、redolog怎么保证持久性的?
4、了解WAL技术吗?redolog刷页时机是什么?
5、MySQL崩溃后,怎么通过redolog恢复数据?
6、undolog(重做日志)日志的作用是什么?
7、为什么有了undolog日志之后还需要redolog?
8、binlog(二进制日志)是什么?记录的什么?
9、binlog日志和redolog日志的区别?(server层、引擎层)
10、介绍一下两阶段提交。
二、索引
1、有哪些索引?
2、索引有什么优缺点?
3、聚簇索引和非聚簇索引的区别?
4、什么样的字段适合当做主键?
5、B+树的优点?为什么不用B树、为什么不用红黑树、二叉树...
6、讲一下联合索引
7、索引失效的情况有哪些?
8、索引怎么进行优化。
三、事务
1、MySQL事务隔离级别有哪些?
2、MySQL数据并发问题有哪些?
3、MySQL不同事务隔离级别是如何实现的?
4、MySQL怎么保证并发安全的?
5、介绍一下MVCC实现原理?
6、串行读如何实现的?
四、锁
1、MySQL有哪些锁?(全局锁、表级锁、行级锁)
2、表级锁有哪些?它有啥作用?
3、行级锁有哪些?它的作用?(记录锁、间隙锁)临键锁=记录锁+间隙锁
4、说一下记录锁和间隙锁。
5、MySQL死锁则呢么导致的?怎么进行查看?(SHOW ENGINE INNODB STATUS)
五、引擎
1、MySQL的基础架构
2、MySQL的存储格式(表、段、区、页)
3、MySQL有哪些常见引擎?
4、Innodb和MyISAM的区别是什么?
5、Innodb内存结构了解吗?(buffer pool和log pool)
六、高可用
1、介绍一下读写分离
2、读写分离怎么实现?
3、介绍一下MySQL主从复制过程
4、主从复制延迟解决方法?
a、要求强一致的场景,读强制走主库。
b、对数据一致性不高的非关键业务,提示用户“数据同步中,请稍等...”
c、使用半同步复制。主库进行事务提交时,等至少一个从库确认收到binlog,才算同步成功。
5、介绍一下分库分表,垂直分库和水平分库(哈希分片、范围分片);垂直分表和水平分表。
6、水平分库分表的策略?(范围分片、哈希分片、路由分片)
7、怎么实现不停机扩容?
8、常见的分库分表插件有哪些?(ShardingSphere MyCat)
9、分库分表可能会带来什么问题?
a、跨库事务无法依赖传统数据库ACID特性,需解决分布式事务解决
b、无法进行跨表join,需在应用层进行拼接
c、需保证全局ID唯一,无法通过传统自增ID实现。
10、雪花算法了解吗?(0符号位,1·41-时间戳,42.51-机器编号(5机房+5服务器Mac),52.63-序列号。
七、调优
1、如何查询mysql中的慢查询语句?
a、启用慢查询日志。(重启设置配置开启,动态开启)
b、show processlist;
c、业务基建中加入对慢SQL的监控。
2、如何开启慢查询日志
a、编辑MySQL的配置文件my.cnf。
slow_query_log = 1
slow_query_log_file = '/slow.log'
long_query_time = 2
b、set global命令动态设置
set global slow_query_log = 1
set global slow_query_log_file = '/slow.log'
set global long_query_time = 2
3、怎么优化慢SQL?
explain语句查找type字段是否使用索引。
添加索引、优化查询条件、减少返回字段。
4、如何优化SQL?(尽可能少地扫描、尽可能快地返回结果)
即添加索引,或者改写SQL使它使用索引。
a、避免返回不必要的列(少用*)
b、分页优化
c、索引优化(索引覆盖、避免使用!= /< > 避免列上函数计算)
d、join优化
e、排序优化
f、union优化
5、explain函数作用