MySQL——源《丁磊MySQL45讲》
文章平均质量分 88
以《ji客时间-mysql45讲》为蓝本,以我的理解,解释并深入学习MySQL相关原理。
陈镇坤27
找个让自己开心的活法
展开
-
27主库出问题了,从库怎么办笔记
一主多从的主备切换author:陈镇坤27创建时间:2021年12月7日00:59:34转载请注明出处文章目录一主多从的主备切换问:MySQL的主备主从结构当中,备库和从库的区别是什么?基于位点的主备切换问:你知道什么是基于位点的主备切换吗?简单介绍下如何做。问:知道主库最新binlog 的位点,可以让从库通过位点同步的方式,从最新的binlog位置开始同步吗?问:怎么确定从库需要同步的对应主库binlog位点呢?GTID问:什么是GTID?问:GTID与事务生成时获得的事务id有什么区别?问:怎么原创 2021-12-07 01:03:46 · 230 阅读 · 0 评论 -
26备库为什么会延迟好几个小时笔记
MySQL备库的并行复制演进author:陈镇坤27创建时间:2021年11月30日22:58:34转载请注明出处文章目录MySQL备库的并行复制演进问:简单介绍下MySQL的备库并行复制各版本的演进情况。问:MySQL5.6之前的备库单线程复制可能产生什么问题?问:MySQL的多线程复制需要解决什么问题?问:在MySQL5.6出现多线程复制之前,备库单线程复制有什么方案可以改进为多线程?问:刚刚介绍的按表分发和按行分发,各自有什么问题?有什么改善方案?问:介绍下MySQL5.6的并行复制方案。问:原创 2021-11-30 23:05:15 · 844 阅读 · 0 评论 -
25MySQL是怎么保证高可用的笔记
MySQL主备延迟、可用与可靠author:陈镇坤27创建时间:2021年11月29日18:52:36转载请注明出处文章目录MySQL主备延迟、可用与可靠问:什么是cap?主备延迟问:简单介绍下主备切换?问:什么是主备延迟?问:主备机器系统时间不一致,是否会导致主备延迟时间错误?问:什么原因可能导致的MySQL的主备延迟?主备同步策略问:MySQL有哪几种主备同步策略,介绍下内容和各自的优缺点;问:可用性优先策略怎么会产生数据不一致情况?问:可用和可靠,这两种策略在主备数据同步时,怎么选择?问:主备原创 2021-11-29 18:57:07 · 143 阅读 · 0 评论 -
24MySQL是怎么保证主备一致的笔记
MySQL如何保证主备一致?author:陈镇坤27创建时间:2021年11月28日16:34:30转载请注明出处文章目录MySQL如何保证主备一致?主备的基本原理问:什么是主备模式?问:主备模式需要注意什么?问:为什么readonly的库还能同步主库的数据更新呢?问:一个更新语句在主从库之间是什么样子的?主备库之间是如何建立和维持联系的?binlog的三种格式问:binlog有哪几种格式,分别说明一下。问:为什么建议将bin_log的格式设置为row呢?问:如果是这条语句insert into t原创 2021-11-28 16:43:02 · 531 阅读 · 0 评论 -
23MySQL是怎么保证数据不丢的笔记
MySQL如何保证数据不丢失author:陈镇坤27创建时间:2021年11月25日16:46:04转载请注明出处文章目录MySQL如何保证数据不丢失问:MySQL能够保证数据不丢失的根据是什么?binlog的写入机制问:binlog是怎么写入磁盘的?问:binlog的同步日志到磁盘,有哪些设置参数,介绍一下。问:为什么binlog写入数据是一次性全部,不能被打断。问:一个极端的场景,若事务提交后,binlog写完,主库同步binlog给备库执行,但主库尚未给客户端答复时,主库挂掉了,那么事务算失败原创 2021-11-25 16:50:16 · 550 阅读 · 0 评论 -
22MySQL有哪些“饮鸩止渴”提高性能的方法笔记
“饮鸩止渴”!不惜一切提升数据库性能author:陈镇坤27创建时间:2021年11月24日20:40:35转载请注明出处文章目录“饮鸩止渴”!不惜一切提升数据库性能短连接风暴问:在想要短期提高数据库性能的情况下,为什么说可以对短连接进行一些处理?问:在高频短连接访问数据库情况下,想要短期业务无损地提高服务器性能,怎么做?问:你说kill掉空闲的线程,那我直接kill掉show processlist中的sleep的线程可以吗?为什么。问:应该怎么干掉一些空闲的线程?问:从服务端干掉线程,需要注意什原创 2021-11-24 20:47:23 · 308 阅读 · 0 评论 -
21为什么我只改一行的语句,锁这么多笔记
例证分析next-key lock加锁规则author:陈镇坤27创建时间:2021年11月24日17:51:23转载请注明出处文章目录例证分析next-key lock加锁规则问:简单介绍一下next-key lock的加锁规则。不同的例子论证加锁1、等值查询2、非唯一索引等值查询问:加行锁使用lock in share mode需要注意什么?3、主键索引范围锁4、非唯一索引范围锁5、唯一索引范围锁bug6、非唯一索引存在等值的例子7、limit语句加锁8、间隙锁导致死锁实战问:下面一个带排序的查原创 2021-11-24 18:27:43 · 396 阅读 · 0 评论 -
20幻读是什么,幻读有什么问题笔记
幻读author:陈镇坤27创建时间:2021年11月24日14:29:44转载请注明出处文章目录幻读问:什么是幻读?问:如果一个事务中的多条相同SQL查询加排他锁,使用的是全表扫描,但只对符合条件的数据加行锁,那会怎么样?问:幻读与脏读的区别?问:在可重复读的隔离级别下,幻读只会在查询为哪种性质时才会出现?问:幻读与事务的可见性规则冲突吗?问:如果在事务中查询数据(加排他锁),不同次数的执行,只存在行锁,会有什么问题?问:MySQL是如何解决可重复读下的当前读导致的幻读问题的?详细介绍下。问:什么原创 2021-11-24 14:35:20 · 328 阅读 · 0 评论 -
19为什么我只查一行的语句,也执行这么慢
19 | 为什么我只查一行的语句,也执行这么慢?author:陈镇坤27创建时间:2021年11月23日00:41:12转载请注明出处文章目录19 | 为什么我只查一行的语句,也执行这么慢?查询始终无返回问:一条查询语句始终无返回,可能是因为什么原因导致的?问:什么是隐式提交锁?问:怎么排查查询语句很久没有反馈的情况?讲一下你的步骤流程。数据量极少但查询很慢问:什么情况下,数据量极少,但查询却很慢呢?——————————————————————————————查询始终无返回问:一条查询语句始终原创 2021-11-23 00:54:35 · 66 阅读 · 0 评论 -
18为什么这些SQL语句逻辑相同,性能却差异巨大笔记
索引的函数操作和字段选择author:陈镇坤27创建时间:2021年11月22日16:50:13转载请注明出处文章目录索引的函数操作和字段选择问:什么情况下可能导致索引失效?条件字段函数操作问:索性字段手动函数操作下,什么情况会发生索引失效,怎么解决,举一个例子说明一下。问:全表扫描一定没有使用索引吗?问:select * from tradelog where id + 1 = 10000 没有破坏搜索树的有序性,能正常走索引吗?隐式类型转换问:如果一个查询语句,索引字段类型是字符串,此时输入参数原创 2021-11-22 16:57:24 · 368 阅读 · 0 评论 -
17如何正确地显示随机消息笔记
MySQL对临时表排序——随机展示数据示例author:陈镇坤27创建时间:2021年11月21日18:53:26转载请注明出处文章目录MySQL对临时表排序——随机展示数据示例问:临时表分哪几种?问:为什么会使用临时表?内存临时表问:举一个例子,并说明排序过程中临时表的作用。问:当使用到临时表的rowid排序时,为什么sort_buffer中初始化的字段之一id被替换为位置信息了?问:为什么隐式自增索引的rowid是6字节?问:sort_buffer的排序涉及到什么排序算法?磁盘临时表问:复现一个原创 2021-11-21 18:58:12 · 926 阅读 · 0 评论 -
16“order by”是怎么工作笔记
order by工作原理创建时间:文章目录order by工作原理问:查询语句进行排序,会用到哪几种排序规则?全字段排序问:什么是全字段排序?什么情况发生。问:怎么判断是一个查询语句是全字段排序。问:全字段排序是如何执行的?问:怎么查看全字段排序的详细过程?rowid排序问:什么是rowId排序?问:什么时候MySQL会采用rowId排序,为什么?全字段排序和rowid排序问:MySQL选择排序的策略是什么?问:在排序上,有什么索引优化建议呢?问:使用排序时,explain怎么看?有什么额外补充吗?—原创 2021-11-18 02:24:35 · 258 阅读 · 0 评论 -
15答疑相关——日志和索引笔记
日志和索引——一些问题author:陈镇坤27创建时间:2021年11月16日23:26:25转载请注明出处文章目录日志和索引——一些问题问:数据更新时不同的数据库奔溃时机,二阶段提交过程中,日志的处理程序如何?问:判定binlog完整的依据是什么?问:怎么关联redo log和binlog的?问:为什么要设计redo log处于prepare,binlog完整,崩溃恢复能提交对应事务?问:能否直接剔除二阶段提交,先redo log完再binlog?问:那只使用binlog来进行崩溃恢复可以吗?问:原创 2021-11-17 00:26:01 · 564 阅读 · 0 评论 -
14count()这么慢,我该怎么办笔记——MySQL的count()函数的实现和优化
MySQL的count()函数的实现和优化author:陈镇坤27创建时间:2021年11月16日13:53:19转载请注明出处文章目录MySQL的count()函数的实现和优化count函数实现原理问:介绍一下MyINSAM引擎和Innodb引擎的count实现方式。问:为什么Innodb引擎不直接将表的总行数统计并存储?问:Innodb引擎在count时有做优化工作吗?问:知道show table status命令吗,这个可以作为Innodb的表行数吗?实现计数方案——redis数据一致性分析与原创 2021-11-16 13:58:58 · 488 阅读 · 0 评论 -
13为什么表数据删掉一半,表文件大小不变笔记
数据的删除与重建author:陈镇坤27创建时间:2021年11月16日00:45:30转载请注明出处文章目录数据的删除与重建数据库的内模式问:对表结构和表数据的存储有什么了解?问:什么是系统表空间和独立表空间?数据的删除流程问:数据是怎么删除的?问:如果数据页的利用率很低,会发生什么?问:什么时候会发生数据“空洞”?重建表问:怎么重建表?其作用是什么?问:怎么理解重建表?Online和Inplace问:说明Online和inplace的区别。问:有哪几种重建表的命令?区别是什么?实战题问:什么场景原创 2021-11-16 00:52:14 · 406 阅读 · 0 评论 -
12为什么我的MySQL会“抖”一下
为什么有时候SQL会忽然变慢创建时间:2021年11月15日18:38:21文章目录为什么有时候SQL会忽然变慢数据脏页、干净页问:什么是脏页?什么是干净页?问:redo log上的数据更新记录什么时候同步到磁盘?会出现什么情况?问:内存快满时,为什么是提前淘汰内存中的“脏页”的同时要进行flush,而不是直接丢弃,等下次读入内存时再更新呢?问:数据页的淘汰策略是什么?问:什么场景会让sql语句忽然变慢?问:在redo log、change buffer之间流动的更新数据最终是如何落地到磁盘的?刷脏页控原创 2021-11-15 18:39:59 · 338 阅读 · 0 评论 -
11怎么给字符串字段加索引
11 怎么给字符串字段加索引?创建时间:2021年11月15日13:28:29文章目录11 怎么给字符串字段加索引?前缀索引问:什么是前缀索引?作用是什么?问:使用前缀索引需要注意什么?实战题问:如果要存储一个市的身份证信息,前6位相同,此时怎么设计身份证索引最好。问:上面两个方案有什么区别?——————————————————————————————前缀索引问:什么是前缀索引?作用是什么?答:指定字符字段的前n个字符带索引,即为前缀索引。其占用空间小,但可能会增加额外的记录扫描次数,因此使原创 2021-11-15 13:33:11 · 73 阅读 · 0 评论 -
10mysql为什么有时候选错索引
MySQL为什么有时候会选错索引创建时间:2021年11月15日01:50:14文章目录MySQL为什么有时候会选错索引问:MySQL优化器选择索引的依据是什么?扫描行数问:MySQL怎么判断扫描行数的?问:怎么获得正确的扫描行数?问:MySQL的索引统计信息的存储设置是什么?实战问:复现一个MySQL选错索引的场景,并解释原因。问:为什么索引a的扫描次数有误?问:为什么主键索引树预估扫描行数没有翻倍?问:为什么扫描行数是37000多行,不是20000多行?排序问:复现一个因为使用了排序而导致索引失效的原创 2021-11-15 01:54:10 · 374 阅读 · 0 评论 -
09 普通索引和唯一索引,应该怎么选择
09 借索引选择初窥change buffer创建时间:2021年11月13日11:21:22文章目录09 借索引选择初窥change buffer查询过程问:索引数据页的内部的查询是怎么样的?问:查询过程中,普通索引和唯一索引的区别?更新过程问:什么是change buffer?问:change buffer会丢失吗?问:一个更新语句是怎么将数据落地到磁盘的?问:为什么change buffer不能适用于更新非二级索引?问:什么时候change buffer会merge?问:更新过程中,普通索引和唯一原创 2021-11-13 11:27:55 · 218 阅读 · 0 评论 -
08事务到底是隔离还是不隔离的笔记
事务隔离的具体原理实现创建时间:2021年11月12日15:16:58文章目录事务隔离的具体原理实现事务隔离原理——一致性读视图问:什么是视图?问:介绍下一致性读视图(快照)的生成原理。问:可重复读怎么利用快照实现的?问:与可重复读相比,读提交是怎么实现的?问:什么时候清理这些数据版本?更新——当前读问:什么是当前读?哪里用到?实战题问:下图事务B查询结果是多少?为什么?问:简单说下一致性读、当前读、二阶段锁协议之间的关系。问:有个场景,开启一个事务后,需要将两个字段相等的数据进行更新,在同一个事务内发原创 2021-11-12 15:25:20 · 739 阅读 · 0 评论 -
07行锁功过——怎么减少行锁对性能的影响
MySQL的行级锁创建时间:2021年11月12日00:30:06文章目录MySQL的行级锁二阶段锁协议问:介绍下Innodb的行锁。问:解释下死锁。问:有个场景,频繁更新一条数据的时候,CPU急速飙升,但事务又没解决几个,是什么原因导致的?用行级锁相关的内容解释下。问:一般怎么解决死锁?问:针对更新热点数据时产生的死锁检测问题,有什么方案可以处理?问:假如删表一万行数据,下面哪几种方式比较好?——————————————————————————————二阶段锁协议问:介绍下Innodb的行锁。原创 2021-11-12 00:48:28 · 514 阅读 · 0 评论 -
06全局锁和表锁——给表加个字段怎么那么多阻碍笔记
MySQL的全局锁、表级锁创建时间:2021年11月11日17:30:57文章目录MySQL的全局锁、表级锁问:MySQL的锁分哪几种类型?全局锁问:介绍下MySQL全局锁的含义和使用场景。问:如果备份时不使用全局读锁,会怎么样?使用的话,又有什么问题?问:有什么别的方案?问:备份有什么操作或重要参数可以做参考?问:你知道set global readonly=true这个参数吗?表级锁问:MySQL有哪几种表级锁?问:什么是MDL锁?问:是否存在,当前MDL是读锁,但之后的DQL语句也被阻塞了的情况?原创 2021-11-11 17:34:39 · 336 阅读 · 0 评论 -
05深入浅出索引下笔记
深入浅出索引(上篇)创建时间:2021年11月11日12:09:16文章目录深入浅出索引(上篇)索引查询流程问:一个查询语句的索引执行流程如何?问:什么是回表?索引覆盖问:什么是索引覆盖?作用是什么?最左前缀原则问:什么是联合索引?问:什么是最左前缀原则?问:怎么设计联合索引?问:联合索引的实战场景?索引下推问:联合索引中第一个字段被模糊匹配,第二字段能否利用得上?——————————————————————————————索引查询流程问:一个查询语句的索引执行流程如何?答:假设字段k是普通索引原创 2021-11-11 12:12:14 · 597 阅读 · 0 评论 -
04深入浅出索引上笔记
深入浅出索引(上篇)创建时间:2021年11月11日11:17:03文章目录深入浅出索引(上篇)索引基本数据类型问:有哪几种索引基本数据类型,分别有什么特点,时间复杂度如何?问:为什么使用N叉树?问:不同的引擎对同样的索引数据类型的实现原理一致吗?举个例子。InnoDB 索引及维护问:索引模型有哪几种?问:基于主键索引和普通索引的查询有什么区别?问:Innodb维护索引的流程如何?问:什么是页分裂?有什么影响?问:怎么减少页分裂?问:选用主键时有什么考虑?问:怎么处理页分裂的”空洞“问题?——————原创 2021-11-11 11:24:15 · 640 阅读 · 0 评论 -
03事务隔离——为什么你改了我看不见笔记
事务基础:隔离与安全问:什么是事务?答:保证一组逻辑单元操作的同时成功或失败的概念。事务隔离问:事务分哪几种?具体怎么理解?答:读未提交:未提交事务的数据操作可被其他事务读取;读已提交:只有已提交的数据操作才能被其他事务读取;可重复读:只能读取到自己启动那一刻时的数据+自己的操作数据;串行化:全局对数据的操作保持线性(通过加读写锁实现);PG:事务AB的泳道和例图解释读未提交:v1 = 2 v2 = 2 v3 = 2读已提交:v1 = 1 v2 = 2 v3 = 2可重复读:原创 2021-11-09 17:28:03 · 363 阅读 · 0 评论 -
02日志系统——一条更新语句是如何执行的笔记
MySQL两大重要日志模块redo log(重做日志)问:什么是redo log?答:MySQL的Innodb引擎独有的物理日志系统,循环写,存储数据的物理变化,有事务保持。问:什么是WAL?答:WAL是write ahead log的英文缩写。MySQL进行数据更新时,选择将更新操作(物理)记入redo log当中,再更新内存,等空闲了或redo log空间满时(write pos抵达check point),再将redo log操作更新到磁盘。问:什么是crash-safe?答:通过re原创 2021-11-09 17:25:57 · 378 阅读 · 0 评论 -
01基础架构——一条sql执行时经历了什么笔记
MySQL执行的基础流程执行流程客户端——>连接器:建立连接,权限收集1、问:连接分什么类型?答:长期保持不断开,则是长连接,否则为短连接。2、问:默认多久断开连接,参数如何设置?答:默认无操作断开时常设置为wait_time_out,默认是8小时。3、问:长连接会导致什么问题?答:MySQL使用的临时内存管理在连接对象中,长期不释放将占用内存。3、问:如何解决长连接问题?答:1、定期断开;2、程序判断对象内存大,则断开,重新建立;3、5.7版本及以后,可以执行mysql_res原创 2021-11-09 17:23:54 · 369 阅读 · 0 评论 -
00写在前面
写在前面时间是2021年11月9日,软考刚结束3天,在感慨自己进步的同时,又感叹自己学习的落后。今晚要上线了,10月份通宵了3次还是4次?我的工作时在是太忙碌了,我又是一个懒惰的人,所以得想一个法子来逼迫自己,即使很累,也要持续不断地学习,想来,从7月开始到现在,我中间学习计划被打断了很多次,即使是这个《MySQL实战45讲》,我也是学了20讲之后,有很长一段时间没有回顾了,今天就在这里锚定一个目标,11月要把它搞定。之前也是在摸索和学习,用processOn画流程图,再写文档笔记,即使我再怎么写笔记原创 2021-11-09 17:19:40 · 65 阅读 · 0 评论