最近由於在實習,工作重點在於一些數據庫的開發,為了更好的理解數據庫的實現機制,目前萌生了要研究一下mysql數據庫源碼的想法。那麼好吧,說干就干,首先我們需要實現對源碼的編譯,這裡我們選擇win7+VS2010來實現,但是試了很多次都失敗了。這是我多次配置環境時遇到的問題,各種博客文章總是不太完全,或者說沒有說明一些遇到的問題的解決方案,這可能跟具體的操作系統和環境有關。本文就說說我安裝的情況。
(1)OS:win7 旗艦版 64位 + VS2010 (2013也試過了)
(2)mysql 源碼(windows版):mysql-5.6.19.zip (下來框選擇source code)
(3)perl tool:ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi
(4)Cmake:cmake-3.0.0-win32-x86 .exe
(5)Bison:bison-2.4.1-setup.exe
安裝需要注意的幾點,一般安裝在根目錄下,如C:\Cmake C:\GnuWin32 C:\Perl64 ,當然也可以是其他目錄,一般路徑不要出現中文字符,空格及特殊字符(這個貌似很重要)。具體安裝見下面博客:Windows+VS2012環境下編譯調試MySQL源碼
除了Bison安裝需要注意意外,其他幾乎都是默認安裝,這些細節最好遵守,以免後續出錯。Perl, Cmake, Bison安裝完事之後,將他們安裝目錄下的bin所在路徑加入環境變量中(windows環境變量添加),如C:\Cmake\bin.好了至此基本ok。保險起見我們需要驗證一下安裝是否成功:
在任意你喜歡的盤裡面創建一個用於安裝的目錄:如在D盤創建mysql然後將mysql-5.6.19.zip解壓到該目錄下,然後在cmd中切換到安裝目錄,此處即為D:\mysql\mysql-5.6.19,記({install}=D:\mysql\mysql-5.6.19),其下包含如下文件目錄:
然後在{install}下執行以下命令:
>mkdir bld
>cd bld
>cmake ..
這樣你可看到類似如下的輸出:
有一些錯誤,目前也沒有解決,但其實這並不影響我們生成VS下MySQL.sln 工程文件。事實上只要看到下面這個就可以了,各種not found也不要緊。如果采用Cmake 圖形界面,其實也差不多了。這裡不再贅述。
下一步我們就可以在VS2010中build solution了(對應生成解決方案),但為了盡可能減少警告或錯誤,我們首先需要對下述文件進行修改:
修改的方法很簡單,就是將這些文件以UTF-8(帶BOM頭的)格式保存。一般使用Nodepad++工具等。
最後一步就是找到{install}\mysql-5.6.19\sql\mysqld.cc中的test_lc_time_sz()函數,將其中的DBUG_ASSERT(0)改為DBUG_ASSERT(1)即可。
至此我們就完成了將源碼轉換成VS中工程文件的目的。之後我們就可以build solution了。如果沒有錯誤說明就已經沒有問題了,一些小的警告可能是因為C++編譯器比C編譯器嚴格的緣故。下一步我們開始調試。
然後將mysqld工程的Debug的:屬性->調試->命令參數,設為--console,如下:
然後啟動實例,
這樣就可以看到下面的命令行界面:
cmd下進入到目錄{install}\client,然後執行如下命令,就可以開始連接到剛剛開啟的mysql服務了。這說明mysql服務已經啟動,下一步就是啟動mysql客服端,這裡我是采用命令行的啟動方式。
好了至此,我們基本完成了在win7下實現在vs下編譯調試mysql數據庫的目的,下面就可以開始研究源碼了。
(1)vs2010:
LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: 文件無效或損壞 [F:\mysql\bld\CMakeFiles\CMakeTmp\cmTryCompileExec2556624813.vcxproj] 解決辦法:這是由於.NET中的cvtres.exe 與 VS2010中的有沖突,刪掉VS2010中的cvtres.exe就可以了(目錄F:\Install\VS2010\VC\bin),注意install是你安裝VS2010的目錄。
為了更好地為後來者指明方向,也為了今後便於自己查詢,故做了這個簡單的指南。也希望按照這篇文檔安裝的朋友遇到任何問題可以一起探討,然後不斷完善該文檔,以便後來者能夠因此而受用,同時營造一個負責人寫稿的氛圍。