源代碼的編譯和調試


InnoDB存儲引擎是開源的,這意味着你可以獲得其源代碼,並查看內部的具體實現。任何時候,WHY都比WHAT重要。通過研究源代碼,可以更好地理解數據庫是如何工作的,從而知道如何使數據庫更好地為你工作。如果你有一定的編程能力,則完全可以對InnoDB存儲引擎進行擴展,開發出新的功能模塊來更好地支持你的數據庫應用。

獲取InnoDB存儲引擎源代碼

InnoDB存儲引擎的源代碼被包含在MySQL數據庫的源代碼中,在MySQL的官方網站鏈接為:http://www.mysql.com/downloads/mysql/。下載MySQL數據庫的源代碼即可。 這里有不同操作系統下的源代碼可供下載,一般只需下載Generic Linux的版本即可。通過MySQL官網首頁的Download鏈接,可以迅速地找到GA版本的下載。但是,如果想要下載目前正在開發的MySQL版本,可能在官網找了很久都找不到鏈接。這時,只要把下載的鏈接從www換到dev即可:如http://dev.mysql.com/downloads/mysql,在這里可以找到開發中的MySQL版本的源代碼了。單擊“Download”下載標簽后可以進入下載頁面。當然,如果你有mysql.com賬戶,可以進行登錄。MySQL官方提供了大量的鏡像用來分流下載,你可以根據所在的位置選擇下載速度最快的地址,中國用戶一般可以在“Asia”這里的鏡像下載。

下載的文件是tar.gz結尾的文件,可以通過Linux的tar命令、Windows的WinRAR工具來進行解壓,解壓后得到一個文件夾,這里面就包含了MySQL數據庫的所有源代碼。所有存儲引擎的源代碼都被放在storage的文件夾下,其源代碼結構如圖所示。

可以看到,所有存儲引擎的源代碼都在這里。文件夾名一般就是存儲引擎的名稱,如archive、blackhole、csv、fedorated、heap、ibmdb2i、myisam、innobase。從MySQL 5.5版本開始,InnoDB Plugin已經作為默認的InnoDB存儲引擎版本;而在MySQL 5.1的源代碼中,應該可以看到兩個版本的InnoDB存儲引擎源代碼。可以看到有innobase和innodb_plugin兩個文件夾:innobase文件夾是舊的InnoDB存儲引擎的源代碼;innodb_plugin文件夾是InnoDB Plugin存儲引擎的源代碼。如果你想將InnoDB Plugin直接靜態編譯到MySQL數據庫中,那么需要刪除innobase文件夾,再將innodb_plugin文件夾重命名為innobase。

InnoDB源代碼結構

進入InnoDB存儲引擎的源代碼文件夾,可以看到源代碼結構 :

下面介紹一些主要文件夾內源代碼的具體作用:

btr:B+樹的實現。

buf:緩沖池的實現,包括LRU算法、Flush刷新算法等。

dict:InnoDB存儲引擎內存數據字典的實現。

dyn:InnoDB存儲引擎動態數組的實現。

fil:InnoDB存儲引擎中文件數據結構以及對於文件的一些操作。

fsp:你可以理解為file space,即對InnoDB存儲引擎物理文件的管理,如頁、區、段等。

ha:哈希算法的實現。

handler:繼承於MySQL的handler,插件式存儲引擎的實現。

ibuf:插入緩沖的實現。

include:InnoDB將頭文件(.h,.ic)都統一放在這個文件夾下。

lock:InnoDB存儲引擎鎖的實現,如S鎖、X鎖以及定義鎖的一系列算法。

log:日志緩沖和重組日志文件的實現。對重組日志感興趣的,應該好好閱讀該源代碼。

mem:輔助緩沖池的實現,用來申請一些數據結構的內存。

mtr:事務的底層實現。

os:封裝一些對於操作系統的操作。

page:頁的實現。

row:對於各種類型行數據的操作。

srv:對於InnoDB存儲引擎參數的設計。

sync:InnoDB存儲引擎互斥量(Mutex)的實現。

thr:InnoDB儲存引擎封裝的可移植的線程庫。

trx:事務的實現。

ut:工具類。

編譯和調試InnoDB源代碼

Windows下的調試

在Windows平台下,可以通過Visual Studion 2003、2005和2008開發工具對MySQL的源代碼進行編譯和調試。在此之前,需要預先安裝如下的工具:

CMake:可以從http://www.cmake.org下載。

bison:可以從http://gnuwin32.sourceforge.net/packages/bison.htm下載。

安裝之后,還需要通過configure.js這個命令進行配置:

C:\workdir>win\configure.js options

option比較重要的選項如下所示。

WITH_INNOBASE_STORAGE_ENGINE:支持InnoDB存儲引擎。

WITH_PARTITION_STORAGE_ENGINE:分區支持。

WITH_ARCHIVE_STORAGE_ENGINE:支持Archive存儲引擎。

WITH_BLACKHOLE_STORAGE_ENGINE:支持Blackhole存儲引擎。

WITH_EXAMPLE_STORAGE_ENGINE:支持Example存儲引擎,這個存儲引擎是展示給開發人員的,你可以從這個存儲引擎開始構建自己的存儲引擎。

WITH_FEDERATED_STORAGE_ENGINE:支持Federated存儲引擎。

WITH_NDBCLUSTER_STORAGE_ENGINE:支持NDB Cluster存儲引擎。

如果只是比較關心InnoDB存儲引擎,可以這樣進行設置,如圖所示。

之后,可以根據你使用的是Visual Studio 2005還是Visual Studio 2008,在win文件下運行build-vsx.bat文件來生成Visual Studio的工程文件。build-vs8.bat表示Visual Studio 2005,build-vs8_x64.bat表示需要編譯64位的MySQL數據庫。如我們需要在32位的操作系統下使用Visual Studio 2008進行調試工作,則可以使用如下命令:

D:\Project\mysql-5.5.5-m3>win\build-vs9.bat

這樣就生成了MySQL.sln的工程文件,打開這個工程文件並將mysqld這個項目設置為默認的啟動項,就可以進行MySQL的編譯和調試了。

之后的編譯、斷點的設置和調試,與在Visual Studio下操作一般的程序沒有什么區別。

Linux下的調試

 

Linux下的調試,通常使用Eclipse。其他一些類Unix操作系統,如Solaris、FreeBSD、MAC,同樣可以使用Eclipse進行調試。

  1. 到http://www.eclipse.org/downloads/下載並安裝Eclipse IDE for C/C++Developers。
  2. 解壓MySQL源代碼到指定目錄,如解壓到/root/workspace/mysql-5.5.5-m3,
  3. 運行如下命令產生Make文件(Eclipse會使用產生的這些Make文件):[root mysql-5.5.5-m3]#BUILD/compile-amd64-debug-max-no-ndb-c,BUILD下有很多compile文件,你可以選擇你所需要的文件。編譯的平台是64位的Linux系統,並且希望可以進行Debug調試,因此選擇了compile-amd64-debug-max-no-ndb文件。注意-c選項,這個選項只生產Make文件,不進行編譯。
  4. 接着打開Eclipse,新建一個C++的項目。給項目取個名稱,如這里的項目名為mysql_5_5_5,並選擇一個空的項目。選擇Finish按鈕后,可以看到新產生的一個空項目。 
  5. 之后選擇左邊的Project Explorer,右擊項目mysql_5_5_5,選擇新建文件夾,將文件夾/root/workspace/mysql-5.5.5-m3導入工程中。 
  6. 導入文件夾后,再右擊項目名mysql_5_5_5,選擇項目屬性,在C/C++Build選項這里進行設置,需要將Build directory選擇為源代碼所在路徑。 編譯配置完后,程序就會自動開始執行編譯工作了。
  7. 上述的這個過程只是編譯的過程,換句話說,編譯完后就產生了mysqld這樣的執行文件。如果想要進行調試,還需要在Debug這里進行如下的配置。 另外如果需要配置一些額外的參數,需要切換到Arguments選項。 
  8. 之后就可以設置斷點,進行調試工作了,這和一般的程序並沒有什么不同。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM