原标题:《怎么学习MySQL源码》公开课资料分享
分享嘉宾
:王松磊,现任职于UCloud,从事MySQL数据库内核研发工作,主要负责UCloud云数据库UDB的内核故障排查及新特性的研发。
分享主题:《怎么学习MySQL源码》,主要介绍MySQL架构,及MySQL代码结构、获取和编译方法;并以MySQL插件开发为例,演示如何开发源码。
课上,王老师非常详细地介绍了源码的学习方法,并分享了很多相关资料。
提示:PPT的内容有限,建议直接观看视频,效果更佳!
1、资料发布
本次公开课的PPT、视频均已上传到百度云盘,链接:https://pan.baidu.com/s/1gfEbHC3
2、你问我答
A. MySQL代码量较大,作为一个新人怎么开始做MySQL代码学习?
答:学习代码,需要你有C和C++的基础,能读懂基础函数的代码、数据库的基础理论知识,知道事务、日志、ACID等基础概念;同时要求你了解MySQL的基本架构,知道MySQL分为哪些模块。
学习时:
首先,建议有条件的同学,阅读https://dev.mysql.com/doc/internals/en/ 对mysql源码大概结构有个基础概念;
其次,学习编译、安装以及使用gdb调试MySQL;
最后,选择自己感兴趣或者工作需要的模块,先学习使用方法,然后从基本功能开始学习源码。
如果暂时没有目标,建议可以先学习MySQLl的基本启动流程、连接处理、命令处理等。
B. 想要生成coredump文件就要在启动时加上--core-file选项,建议这么做么?另外,意外崩溃时生成coredump文件,对于不熟悉源码的人怎么去检查、排查问题呢?
答:调试和学习使用的MySQL,建议添加该选项,并编译成debug版本;如果不熟悉源码,发生coredump后,根据coredump文件定位发生问题的函数和模块,然后根据实际进行的操作进行排查。另外可以借助网络,比如去stackoverflow上查找类似的问题或者直接提问。
C.从事MySQL源码这方面工作,对linux C这块有什么要求么?
答:首先C语言的基础是要有的。MySQL有很多版本,包括linux、windows,可能要根据实际的需要来选择不同的平台。但源码实现的原理不会有太大的差别。
D. MySQL全部是sleep状态,但是LSN一直涨,请问下是什么原因?
答:这个要具体情况具体分析,我们能查看到的Last checkpoint本身就可能落后于Log sequence number,然后进行追赶。如果确定mysql未做任何操作,而redo在不断的生成,可以使用perf或者pstack查看一下mysqld是否有异常。
E. 作为运维DBA,学习源码对工作上有哪些实际帮助?
答:运维dba学习源码本身就有天然的优势,很多源码专家都是由DBA转型的。
是否对工作有实际的帮助,我觉得是见仁见智的问题,个人觉得了解原理可以更好帮助运维,比如设置sync_binlog和innodb_flush_log_at_trx_commit为1可以保证宕机时不丢数据,但是如果了解原理,可以延伸到更多的知识,比如什么时候可以不设置成双1,不设值成双1怎么保证数据的一致,数据丢失是否可以追补回来等等。
但是另一方面,学习源码本身就是要消耗很多的时间,可能会消耗掉很多工作外的时间,即使对运维有帮助,也不是立竿见影的,是一个技术沉淀的过程,需要自己去做权衡。
3、分享内容
责任编辑: