Server层依次执行SQL的步骤是:
索引相关3、MySQL为什么要用索引?
根本原因
扩张
4、三种常见的索引底层数据结构及其优缺点
用于索引的三种常见底层数据结构是哈希表、有序数组和搜索树。
5、常见的索引类型以及它是如何工作的?
根据叶子节点的内容,索引类型分为主键索引和非主键索引。
6、MyISAM 和 InnoDB 实现 B-tree 索引有什么区别?7、InnoDB 为什么要设计 B+ 树索引?
两个考虑:
为什么选择B+树:
8、什么是覆盖索引和索引下推?
覆盖指数:
索引下推:
9、什么动作会使索引失效?10、字符串加索引日志相关 11、什么是MySQL的change buffer?12、MySQL如何确定一行扫描的次数?13、MySQL的redo log和binlog有什么区别?
14、为什么需要重做日志?
15、为什么redo log有crash-safe能力,不能被binlog替代?
第一点:redo log可以保证innoDB可以判断哪些数据已经被flush了,哪些数据还没有
第二点:如果redo log写入失败,说明操作失败,事务无法提交。
16、数据库崩溃时,没有刷到内存的数据如何恢复?
根据redo log和binlog的两阶段commit,未持久化数据分为几种情况:
17、重做日志的写法?
重做日志由两部分组成,内存中的日志缓冲区(redo log buffer)和磁盘上的日志文件(redo log file)。
MySQL每执行一条DML语句,都会先将记录写入redo log buffer(用户空间),然后保存到内核空间的缓冲区OS-buffer中,然后在某个时间写入多条操作记录redo时间点。日志文件(刷盘)。这种先写日志,再写磁盘的技术称为 WAL。
可以发现redo log buffer是写到redo log文件中的,redo log文件是通过OS buffer传输的。其实可以通过参数innodb_flush_log_at_trx_commit来配置。参数值的含义如下:
18、redo log的执行过程?
我们来看看Redo log的执行过程,假设执行的SQL如下:
更新 T seta =1 whereid =666
MySQL客户端向MySQL Server层发送请求语句update T set a =1 where id =666。
MySQL Server层收到SQL请求后,进行分析、优化、执行等处理工作,并将生成的SQL执行计划发送给InnoDB存储引擎层执行。
InnoDB 存储引擎层在内存中记录了将 a 修改为 1 的操作。
记录在内存中记录后,会修改redo log的记录,增加一行记录,其内容就是在哪个数据页上需要修改的内容。
之后,将事务的状态设置为prepare,表示事务已准备好提交。
MySQL Server层处理完事务后,会将事务的状态设置为commit,即提交事务。
重做日志收到事务提交请求后,会将刚刚写入内存的操作记录写入磁盘,从而完成整个日志记录过程。
19、binlog是什么概念射频卡多线程读写原理及其实现 修改密码,起什么作用,能不能crash-safe?20、什么是两阶段提交?
MySQL将redo log的写入分为两个步骤:prepare和commit,然后穿插写入binlog,也就是“两阶段commit”。
两阶段提交是为了保持两个状态在逻辑上一致。redolog 用于在主机发生故障时恢复未更新的物理数据,binlog 用于备份操作。两者本身是两个独立的个体,为了保持一致性,必须使用分布式事务解决方案来处理。
为什么需要两阶段提交?
恢复数据时,如果redolog状态为commit,则表示binlog也成功,直接恢复数据;如果redolog是prepare,则需要检查对应的binlog事务是否成功,决定是回滚还是执行。
21、MySQL如何知道binlog完整?
事务的 binlog 具有完整的格式:
22、什么是WAL技术,有什么优势?
WAL,中文全称是Write-Ahead Logging,它的重点是日志先写入内存,再写入磁盘。MySQL 执行更新操作后,它会在实际将数据写入磁盘之前记录日志。
优点是每次操作都不需要实时将数据写入磁盘,即使在crash后也可以通过redo log恢复,因此可以实现对SQL语句的快速响应。
23、binlog日志的三种格式
binlog 日志有三种格式
报表格式
每条修改数据的 SQL 都会记录在 binlog 中
行格式
不记录有关 SQL 语句上下文的信息,只记录修改了哪条记录。
混合格式
其实就是Statement和Row的结合。一般语句修改使用语句格式保存binlog。比如有些功能,语句无法完成主从复制操作,binlog以行格式保存,MySQL会根据每条具体执行的SQL语句区分要记录的日志格式。
24、redo log 日志格式
重做日志缓冲区(在内存中)由端到端连接的四个文件组成:ib_logfile_1、ib_logfile_2、ib_logfile_3、ib_logfile_4。
25、可以执行得非常快的SQL语句执行得比预期慢很多。是什么原因?怎么解决?
原因:从大到小,可以分为四种情况
解决:
26、InnoDB数据页结构
一个数据页大致分为七个部分
数据相关27、MySQL如何保证数据不丢失?28、误删数据怎么办?
DBA 的核心工作是确保数据的完整性。首先,必须做好预防工作。预防大概是通过以下几点:
29、drop、truncate和delete的区别30、MySQL中有两个kill命令
杀不死的理由
31、如何理解MySQL边读边发送32、为什么MySQL的大表查询不爆内存?33、MySQL临时表的用法和特点34、MySQL存储引擎介绍(InnoDB、MyISAM、MEMORY)35、都说InnoDB好射频卡多线程读写原理及其实现 修改密码,那你要不要用内存引擎?36、数据库误操作如何进行数据恢复?
如果数据库在某个时间误操作,可以找到离误操作最近的时间节点的bin log,重放到临时数据库,然后选择误删的数据节点,恢复到在线数据库。
主从备份相关37、MySQL如何保证主从同步?
主从关系的建立:
MySQL主备切换流程:
一个事务完成同步过程:
38、什么是主从延时
执行同一事务时,主库和备库之间存在时间差。主要原因是:
39、为什么需要多线程复制策略?40、MySQL的并行策略有哪些?41、MySQL中的一主一备和一主多从有什么区别?
在主备双M架构下,主备切换只需将客户端流量切换到备库;而在主多从架构中,主备切换不仅将客户端流量切换到备库,还将客户端流量切换到备库。从库需要连接到新的主库。
42、如何解决主库的问题?
43、MySQL读写分离涉及读过期问题的几种解决方法?44、MySQL的并发链接和并发查询有什么区别?性能相关45、短时间内提升MySQL性能的方法46、为什么MySQL自增主键ID不连续?47、为什么InnoDB使用自增ID作为主键?48、如何最快的复制一张表?49、授予和刷新权限语句 50、你想使用分区表吗?51、join 用法 52、MySQL 有哪些自增ID?各自的场景是什么?53、MySQL内部如何生成Xid?
MySQL内部维护了一个全局变量global_query_id,每次执行一条语句(包括一条select语句)时都会给Query_id赋值,然后给这个变量加1。如果当前语句是事务执行的第一条语句,MySQL 也会将 Query_id 分配给事务的 Xid。
而global_query_id是纯内存变量,重启后会清零。所以你知道在同一个数据库实例中,不同事务的Xid可能是相同的。但是MySQL重启后会重新生成一个新的binlog文件,保证Xid在同一个binlog文件中必须是唯一的。
锁相关54、说说MySQL锁
55、什么是幻读?
在同一个事务中,前后两次查询相同范围的数据,第二次看到的是第一次没有查询到的数据。
出现幻觉的场景:
幻读引起的问题:
解决:
其他Why系列56、MySQL为什么会抖动?57、为什么删除表格后表格文件大小还是不变?58、count(*)实现及各种计数的比较59、orderby排序内部原理60、如何高效使用MySQL显式随机消息
持续更新。
参考:
程序员专属卫衣
产品直接购买链接
最后!我找到了程序员爱穿毛衣的原因
mysql的这些坑你踩过吗?很难预防
谈谈MySQL数据备份杀手binlog
MySQL数据查询会不会太OOM?
京东:MySQL主备延迟有哪些陷阱?主备倒换策略
4件专属极客毛衣,程序员秒懂!
请登录后发表评论
注册
社交帐号登录