全解MySQL终章:这份爆肝30W字的数据库宝典赠与有缘的你!
theme: channing-cyan
引言
年难留,时易损,岁月匆匆,不知不觉中三月时光转瞬即逝,继之前的《并发编程系列》、《JVM虚拟机系列》后,《全解MySQL专栏》也步入了完结的尾声。
在早段时间熟悉我的小伙伴应该知道,基本上一月只会更新
1~2
篇新文,所以前面两个专栏,共计花费一载有余的时间才真正更完,但近三个月的时间内,我成为了大家口中“生产队的驴”,最长不过三天就会发布一篇新文,有时甚至单日内会发布多篇。
因而这三月内,MySQL
专栏共计更新近三十个大章,共计32W+
字(字数统计来自于掘金编辑器),其中涉及到数据库进阶知识的方方面面,按以往习性,由于MySQL
专栏的内容颇多,这里也列出总纲便于诸君翻阅。
全解MySQL目录
- (一)《全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!》
- (二)《全解MySQL:一条SQL语句从诞生至结束的多姿多彩历程!》
- (三)《MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!》
- (四)《MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述》
- (五)《MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!》
- (六)《MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱》
- (七)《MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析》
- (八)《MySQL锁机制:高并发场景下该如何保证数据读写的安全性?》
- (九)《MySQL之MVCC机制:为什么你改了的数据我还看不见?》
- (十)《全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析》
- (十一)《MySQL日志篇之undo-log、redo-log、bin-log.....傻傻分不清》
- (十二)《MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙》
- (十三)《MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?》
- (十四)《全解MySQL之各方位事无巨细的剖析存储过程与触发器》
- (十五)《MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~》
- (十六)《MySQL调优篇:单机数据库如何在高并发场景下健步如飞?》
- (十七)《SQL优化篇:如何成为一位写优质SQL语句的绝顶高手!》
- (十八)《MySQL排查篇:该如何定位并解决线上突发的Bug与疑难杂症?》
- (十九)《MySQL之表分区篇:涨知识了!携手共探鲜为人知的表分区!》
- (二十)《MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!》
- (二十一)《MySQL之高并发大流量情况下海量数据分库分表的正确姿势》
- (二十二)《全解MySQL之分库分表后带来的“副作用”一站式解决方案!》
- (二十三)《MySQL分表篇:该如何将月增上亿条数据的单表处理方案优雅落地?》
- (二十四)《全解MySQL之主从篇:死磕主从复制中数据同步原理与优化》
- (二十五)《MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学》
- (二十六)《MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!》
- (二十七)《舞动手指速写一个Seata-AT框架解决棘手的分布式事务问题》
- (二十八)《MySQL面试通关秘籍:这次你也可以在简历写上精通MySQL!》
这里先附上《全解MySQL专栏》的大章目录,接着再简单介绍一下每个章节,大家可根据各个章节的简介,根据自己缺乏的知识点去选择性阅读。
全解MySQL总纲
不识庐山真面目,只缘身在此山中,这句古诗相信诸位并不陌生,其内在含义是指:想要研究明白某个事物,开始不能拘泥于某个细节,必须先站在上帝的视角纵观全貌,认识了大体梗概后,再去深入到每个细枝末节做研究,因此自顶向下全解MySQL
架构则作为了系列的开篇:
- (一)《全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!》
从宏观上介绍了MySQL
数据库的整体架构后,虽然对MySQL
底层有了一定认知,但缺乏形象化的理解,所以第二章中,分别站在SQL
语句执行的角度上,化身一条读取语句、以及一条写入语句,切身感受了数据库执行过程中,各个层面对语句会做什么操作:
- (二)《全解MySQL:一条SQL语句从诞生至结束的多姿多彩历程!》
在设计MySQL
的库表结构时,很多时候我们都是率性而为,开发时代码敲着敲着发现结构不合理,又会去重构表、甚至大面积重构库结构,那在设计库表时有没有一套合理的设计方法论呢?答案是有的,库表设计篇中则详细讲到了数据库结构设计的一些方法论,即数据库范式与反范式设计:
- (三)《MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!》
学习了设计库表结构的一些方法论后,接着来聊聊数据库系统中的一个重要角色:索引,但索引的分类五花八门,索引的称呼千奇百怪,对于MySQL
的索引机制,到底该如何建立一个系统化的体系呢?索引初识篇则从索引的基本认知出发,全解MySQL
的索引体系:
- (四)《MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述》
对索引机制建立出系统化的体系后,但大家创建的索引真的合格吗?使用索引时的方式真的正确吗?索引应用篇则携手诸位,共探建立索引的正确姿势与使用索引的最佳指南!让你对索引的建立与使用,更加得心应手~: - (五)《MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!》
经过前面两章关于索引的学习后,大家已经对索引有了很高的掌握度,但MySQL
的索引机制,自始至终对于我们都是一个黑盒般的存在,我们并不清楚建立索引后MySQL
会发生什么,也并不清楚使用索引查询时会如何检索数据,而在索引原理篇中,则会以动画的形式详解MySQL
索引的底层实现:
- (六)《MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱》
MySQL
的核心是存储数据,是整个业务系统中最重要的一层,可谓是整个应用程序的“大本营”,因此只要MySQL
存在些许隐患,对整个系统都是致命的,那MySQL
在接收外部数据写入时,有没有可能会发生问题呢?接着在MySQL
事务篇中,详细讲到了数据不一致问题,以及事务机制的方方面面:
- (七)《MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析》
理解了基本的事务机制后,MySQL
内部会采用多线程执行SQL
语句,不过多线程虽然性能优异,但在高并发情况下也会带来一系列隐患问题,而MySQL
在并发读写时,是如何保障数据安全性的呢?这就引出了MySQL
的锁机制:
- (八)《MySQL锁机制:高并发场景下该如何保证数据读写的安全性?》
增、删、改是数据库中十分常见的操作,但为什么一个事务对一条数据进行变更操作后,另外一个事务却看不见呢?这背后的一切究竟是何原理?MVCC
篇中则会与诸位详聊MVCC
多版本并发控制技术:
- (九)《MySQL之MVCC机制:为什么你改了的数据我还看不见?》
对MySQL
事务与锁机制有了全面认知后,但事务隔离与锁机制底层究竟是怎样实现的呢?对于这块似乎很少有资料去讲,而事务与琐原理篇中,会深入底层真正揭开事务与锁机制的神秘面纱:
- (十)《全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析》
学习了MySQL
数据库的事务、锁、MVCC
机制这些并发知识后,紧接着会聊聊它的日志体系,任何项目都会有日志,MySQL
也不例外,其日志种类繁多,如撤销日志、重做日志、错误日志、慢查询日志、中继日志、二进制日志.....,日志篇则打算全解MySQL
中的各类日志,将不同日志间的关系彻底理清楚~:
- (十一)《MySQL日志篇之undo-log、redo-log、bin-log.....傻傻分不清》
MySQL
会基于磁盘工作,这句话几乎刻在了每个后端程序员DNA
里,但答案的确如此吗?其实并不能盖棺定论,因为在MySQL
实际运行时,尤其是InnoDB
引擎的表,几乎会将所有操作都放会在内存中完成,啥?基于内存?为啥呢?内存篇中会带诸位一探究竟:
- (十二)《MySQL之内存篇:深入探寻数据库内存与Buffer Pool的奥妙》
MySQL
设计的引擎层是可拔插式的,而官方在最初也倾尽心血打造了MyISAM
引擎,MyISAM
在MySQL
支持的众多引擎中属于“亲生子”,而著名的InnoDB
则是由第三方研发的“外来子”,但为何InnoDB
在后来成了默认引擎?背后的这一场“夺嫡大戏”,究竟是MySQL
始乱终弃,还是InnoDB
实力过硬?引擎篇中则会细说这背后不为人知的内幕:
- (十三)《MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?》
存储过程相信大家都听说过,在实际开发中却很少有用到,但有时它却能够给咱们带来意料不到的额外收获,不过很多小伙伴对于这块知识缺乏掌握,因此接下来会重点讲述MySQL
的存储过程与触发器:
- (十四)《全解MySQL之各方位事无巨细的剖析存储过程与触发器》
编写SQL
语句时,明明记得有个命令/函数可以实现需要的功能,但偏偏不记得该怎么写,这时只能靠盲目的去百度来寻找,这难免显得有些呆呆的,而接下来这章则将罗列2000+
条常用命令和函数,彻底打造一个MySQL
命令大全:
- (十五)《MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~》
在如今IT
开发行业中,系统访问量日涨、并发暴增、线上瓶颈等各种性能问题纷涌而至,数据库的读写上限成为了系统中新的瓶颈,而性能优化则成为了现时代中一个炙手可热的名词,无论是在开发、面试过程中,性能优化都是一个常谈常新的话题...,调优篇中则会详解MySQL
各方面的调优小技巧:
- (十六)《MySQL调优篇:单机数据库如何在高并发场景下健步如飞?》
除开基本的调优技巧外,咱们编写SQL
语句时也值得刻意注意,写好满足业务需求的SQL
不难,但写出性能优异的SQL
却并非易事,成为一名把业务SQL
写的又快又好的高手,这里面需要一定的基本功和技巧,如若你只停留在满足业务需求即可的程度,那SQL
优化篇可助你快速打破瓶颈,成为一位人见人夸的绝顶高手:
- (十七)《SQL优化篇:如何成为一位写优质SQL语句的绝顶高手!》
经过前面两章实操篇的教学后,MySQL
线上会出现的疑难杂症也不容小视,数据查询慢、CPU100%
、磁盘100%
、客户端连接异常、死锁问题频发.....等各类问题,这背后到底怎么回事!出现时又该如何排查,阅读完下述篇章后,相信你的心中能够得到答案:
- (十八)《MySQL排查篇:该如何定位并解决线上突发的Bug与疑难杂症?》
分库分表大家都听说过,但表分区这个概念却鲜为人知,分区技术是指建立在不拆分表的基础上,将数据划分到多个物理分区中,从而改善整体的表性能,表分区篇中则与诸位携手共探鲜为人知的表分区技术: - (十九)《MySQL之表分区篇:涨知识了!携手共探鲜为人知的表分区!》
对于技术新特性,这是诸多开发者下意识会忽略的地方,如Java
最新发布了Java19
,但绝大多数小伙伴的认知却依旧停留在Java8
,而MySQL
最新发行了8.0.29
版本,也包括期间推出许多新技术也鲜为人知!在MySQL
不同的版本,其性能可谓是真正的天差地别,如果这些你还未曾了解,特性篇中则能够给出一份完美的答卷:
- (二十)《MySQL特性篇:2022年的我们,必须要懂的那些数据库新技术!》
高并发处理是面试中一个百问不厌的问题,数据库也一直是业务系统的核心,因此想要掌握高并发处理经验,处理好数据库的大流量并发问题是永远绕不开的话题,分库分表篇中,会详细展开叙述数据库分库分表的核心方法论: - (二十一)《MySQL之高并发大流量情况下海量数据分库分表的正确姿势》
分库分表后对数据库的性能提升,用一个字形容,那就是爽!分库分表能让数据存储层真正成为高性能、高可用、高稳定的三高架构,但爽归爽,其带来后患问题也是无穷的,跨库Join
问题、聚合函数不可用、分布式事务问题、主键唯一性问题、数据分页问题、节点扩容问题、多维度查询问题.......,分库分表后产生的这一系列问题,到底是怎么回事,又该如何解决呢?下述这篇会给出了答案:
- (二十二)《全解MySQL之分库分表后带来的“副作用”一站式解决方案!》
单日一张表的数据暴增几十万、几百万甚至上千万时,这远超出传统单表的性能极限,此时该如何处理呢?库内分表篇会结合真实的线上业务,全面阐述单表数据增长过快的优雅处理方案: - (二十三)《MySQL分表篇:该如何将月增上亿条数据的单表处理方案优雅落地?》
主从复制是一种十分常见的高可用手段,MQ、Redis、ES、ZK、Kafka....
等任何技术栈都会支持对应实现,而MySQL
也同样不例外,但数据库的主从复制技术底层是咋实现的?主从原理篇中将深入进行探讨:
- (二十四)《全解MySQL之主从篇:死磕主从复制中数据同步原理与优化》
上一章节中讲明白了主从集群的概念和原理,但主从读写分离、双主双写热备这些高可用方案,又该如何具体落地呢?主从实践篇中,会带来一套手摸手版超详细的搭建教学: - (二十五)《MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学》
在前面两章关于分库分表的章节中,讲明白了分库分表的方法论,以及产生的后患问题该如何解决,但这类讲分库分表概念的文章比比皆是,真正带人落地实践资料相对较少,而分库分表实践篇中会基于最新的Sharding-Sphere5.2.1
技术栈,逐步讲解分库分表的完整性实战:
- (二十六)《MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!》
分布式事务问题是分布式系统中一个头疼的问题,这也是分库分表后不得不解决的一个疑难杂症,但现如今可以引入成熟的框架,如Seata
解决,但为何这些框架仅靠一个注解、几行配置就能解决令人头大的分布式事务问题呢?分布式事务篇中会一步步手写框架理解背后的原理:
- (二十七)《舞动手指速写一个Seata-AT框架解决棘手的分布式事务问题》
前面叨叨絮絮了许多,讲述的内容中既有概念方法论,也有实操实践的经验分享,亦有底层原理的详细剖析,兜兜转转下来写的内容不算多,但也不算少,这对于一些想要面试前快速突击的小伙伴而言,属实并不太友好,因此在MySQL
系列的结尾中,对整个系列所有章节的内容,进行了核心知识点提炼,最终撰写出了一篇面试宝典:
- (二十八)《MySQL面试通关秘籍:这次你也可以在简历写上精通MySQL!》
经过这么多篇章的学习后,有人也许会问,学完能够达到精通的层次吗?精通这个词汇,对于每个做技术的小伙伴而言,是额外惧怕的词汇,几乎很少有人敢说自己精通某个技术栈,但我想说的是:如果你对某个技术栈的掌握度,能够超过
80~90%
的同行,那你就具备在简历上写精通的底气!
至此,MySQL
专栏就勉强画上了结束的句号,认真阅读上述各个篇章后,也绝对能够助力大家达到“精通”的水准!至少面试过程中、与同事讨论过程中、与群友吹水过程中.....,你能够回答上来别人问的,而且也能知道别人不知道的,这也就达到了所谓的“精通”层次。
同时,如果感觉我的文章对你有些许帮助,欢迎点赞、评论、收藏与关注哟~
参考书籍与资料
- 《MySQL必知必会》
- 《高性能MySQL》
- 《MySQL技术内幕》
- 《MySQL排错指南》
- 《数据库索引设计与优化》
- 《深入理解MySQL核心技术》
- 《MySQL性能调优与架构设计》
- 《深入浅出MySQL》
- 《数据库系统实现》
上述几本是之前个人看过的MySQL
书籍,撰写MySQL
专栏中的内容时,多多少少有参照其中的章节内容,同时也参考了例如尚硅谷、B
站的视频教学,以及1000+
以上博客资料,但这里无法完全统计就不再罗列。
- 全解MySQL终章:这份爆肝30W字的数据库宝典赠与有缘的你!
- 追忆四年前:一段关于我被外企CTO用登录注册吊打的不堪往事
- (十一)Netty实战篇:基于Netty框架打造一款高性能的IM即时通讯程序
- (四)MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述
- (九)MySQL之MVCC机制:为什么你改了的数据我还看不见?
- (十)全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
- (二十八)MySQL面试通关秘籍:这次你也可以在简历写上精通MySQL!
- (一)全解MySQL之架构篇:自顶向下深入剖析MySQL整体架构!
- (九)Java网络编程无冕之王-这回把大名鼎鼎的Netty框架一网打尽!
- (八)MySQL锁机制:高并发场景下该如何保证数据读写的安全性?
- (十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
- (七)MySQL事务篇:ACID原则、事务隔离级别及事务机制原理剖析
- 深入理解SpringMVC工作原理,像大牛一样手写SpringMVC框架
- (三)MySQL之库表设计篇:一、二、三、四、五范式、BC范式与反范式详解!
- (五)MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!
- (六)MySQL索引原理篇:深入数据库底层揭开索引机制的神秘面纱!
- (五)网络编程之流量接入层设计:基于性能怪兽从零构建日均亿级吞吐量的网关架构!
- (四)网络编程之请求分发篇:负载均衡静态调度算法、平滑轮询加权、一致性哈希、最小活跃数算法实践!
- (三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
- Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!