如何才能讓自己看懂MySQL源碼,並且能夠自己寫出相應的patch?
03-19
請有經驗的高手回答下,如何才能讓自己看懂MySQL源碼,並且能夠自己寫出相應的patch?就是說如果才能做一個NB的MySQL的開發的DBA,需要懂什麼語言?學習哪些東西才能讓自己達到能給MySQL打補丁,定製MySQL,並且能自己開發出業務想要的功能?PS:我是搞Oracle的
樓主,我以前也是 Oracle dba,後來做過半年的 MySQL 源碼的開發。
關於 mysql 的源碼的書,我整理過一個豆列 ,mysql source code 可以幫你入門。知道如何為添加個函數,加個命令,加個 plugin,replication 的細枝末節。
但如果要真正的掌握他的代碼,需要很長的時間。MySQL 加上 Innodb 的代碼有 140w 行代碼 ,有且是你要完全看懂 Innodb 需要啃下 事務處理 這本書,這本書比較難以理解。
之外 Mysql Server 的代碼雖然多,但是比較好理解了,我看過下面這些:
1. 網路模型,MySQL 的網路模型太老了, one connection per thread,代碼很簡單。
2. 協議解析,MySQL 的 協議還算比較簡單的,但是設計的 prepare 的協議就要花點時間,我寫個一些分析的文章和圖,網上你搜索下。這裡你要花時間把 mysql client 這個客戶端的代碼都看看,這樣對你往後無論開發 jdbc還是 libmysqlclient 的項目都有幫助。
3. SQL 解析,咳咳,不好意思大難題了。不過還好對於編譯原理的知識你只需要了解前端的詞法解析和 yacc 的使用即可,你可以參考 flex and bison 這本書 ,僅僅需要看懂 yy 和 lex 文件即可,yy 比較長,但裡面涵蓋了所有的 MySQL 所支持的 sql 的語法。我也寫過一個簡單的 sql parser,在我的 github 上。4.replication,這個不複雜就幾個文件。還有一些忘記了,基本上我就看過這些,因為 MySQL 實在太大了。另外淘寶幾位同事的博客應該多關注一下,他們是專門的 MySQL 開發人員。推薦閱讀:
※高性能mysql優化一之配置篇
※mysql 的事件調度器(Event Scheduler)穩定性如何?主要用在什麼場合?
※MySQL 中一個庫中表數量是否有限制?表太多是否影響數據的性能?比如要把一張表拆成 1024 張,對於每個表的性能的影響是什麼?這些影響需要考慮哪些因素?
※誰殺死了 MySQL? - 後記