1. 为什么要阅读MySQL源码?
之前已经看过 高性能MySQL 和 MySQL技术内幕InnoDB存储引擎, 但总觉得只是看看书上这么说还是不够.
比如 高性能MySQL 里画的有B-Tree索引的示意图,可是B-Tree索引究竟长什么样子,在MySQL里是怎么存储的,没什么概念; 里边还提到关联查询的”泳道图”,在代码层面到底是怎么执行的,也不清楚.
2. 从哪儿开始?
直接看MySQL的源码有点困难.
好在有一本讲MySQL的书, 叫 Understanding.MySQL.Internals, 书虽然有点老,但看起来是个不错的开始.
大概过一下书的内容,发现大部分内容还是看不下去. 只有第4章 Client/Server Communication 还能看.
3. Protocol
Understanding.MySQL.Internals 的第4章 Client/Server Communication 讲了MySQL Server和客户端沟通的协议, 结合着wireshark, 很快就能搞明白.
4. main() -> mysqld_main()
MySQL是由C++写的,入口函数main()直接调用了mysqld_main().
Server启动的代码都在这里,大部分都看不懂.
直到最后的 handle_connections_sockets().
5. handle_connections_sockets()
读过UNP的看这部分代码应该都没问题.
poll()
accept()
thread_scheduler->add_connection()
pthread_create() or thead_cache
handle_one_connection()
for (;;) { <