天天看點

mysql 源代碼目錄及安裝目錄介紹

1、源代碼目錄介紹:

1、BUILD

    BUILD目錄是編譯、安裝腳本目錄,絕大部分以compile-開頭,其中的SETUP.sh腳本為C和C++編譯器設定了優化選項。

2、client

    client目錄包括常用指令和用戶端工具代碼,這些源代碼檔案中包括密碼确認功能get_password.c、SSL連接配接可行性檢查、MySQL用戶端mysql.cc、mysqladmin工具和mysqladmin用于伺服器的運作mysqladmin.c、顯示資料庫及其表和列的mysqlshow.c等。

3、storage

    MySQL的各類存儲引擎代碼都在該目錄中,包括CVS存儲引擎(cvs目錄)、InnoDB存儲引擎、Federate等。存儲引擎是資料庫系統的核心,封裝了資料庫檔案的操作,是資料庫系統是否強大最重要的因素。Mysql實作了一個抽象接口層,叫做 handler(sql/handler.h),其中定義了接口函數,比如:ha_open, ha_index_end, ha_create等等,存儲引擎需要實作這些接口才能被系統使用。這個接口定義超級複雜,有900多行 :-(,不過我們暫時知道它是幹什麼的就好了,沒必要深究每行代碼。對于具體每種引擎的特點,我推薦大家去看mysql的線上文檔: http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html   

應該能看到如下的目錄:  

* innobase, innodb的目錄,目前最流行的存儲引擎  

* myisam, 最早的Mysql存儲引擎,一直到innodb出現以前,使用最廣的引擎

* heap, 基于記憶體的存儲引擎  

* federated, 一個比較新的存儲引擎  

* example, csv,這幾個大家可以作為自己寫存儲引擎時的參考實作,比較容易讀懂

4、mysys

    mysys代表MySQL system library,是MySQL的庫函數檔案。庫函數是一些預先編譯好的函數的集合,這些函數都是按照可再使用的原則編寫的。它們通常由一組互相關聯的用來完成某項常見的工作的函數構成,從本質上來說庫是一種可執行的二進制形式,可以被作業系統載入記憶體執行。在mysys目錄中,共有125個.c檔案,且随着版本的演化和新功能的加入,庫函數也在不斷的增大。

    其中包括用于快速排序的mf_qsort.c、用于臨時檔案管理的mf_tempfile.c、定義在用戶端編譯時采用字元集類型的charset-def.c、字元集相關操作(字元集加載、初始化等)的charset.c。

    mysys是一個大雜燴,包含了各種各樣的功能庫檔案,包括檔案打開、資料讀寫、記憶體配置設定、OS/2系統特别優化、線程控制、權限控制、RaidTable、動态字元串處理、隊列算法、網絡傳輸協定、初始化函數、錯誤處理、平衡二叉樹算法、符号連接配接處理、唯一臨時檔案名生成、hash函數、排序算法、壓縮傳輸協定等。

5、sql

    sql目錄出了包含mysqld.cc這一MySQL main函數(沒錯,這裡就是資料庫主程式mysqld所在的地方,大部分的系統流程都發生在這裡。)所在的檔案外,還包括了各類SQL語句的解析/實作、線程、查詢解析與查詢優化器、存儲引擎接口(你還能看到sql_insert.cc, sql_update.cc, sql_select.cc,等等,分别實作了對應的SQL指令。後面我們還要經常提到這個目錄下的檔案)。在storage下各存儲引擎目錄中,存在的是各類存儲引擎的實作代碼,而在sql/目錄下存放的是處理接口handler。handler類中存在很多虛函數,需要其子類進行實作

    如今在MySQL 5.1中,綜合檔案hadler.cc和handler.h處理了所有不同種類存儲請求。各種SQL語句的執行代碼也可以在sql目錄中找到,這類檔案常以sql開始對檔案命名。MySQL将UNION和ROLLUP等操作看作内部函數。

大概有如下及部分:  

SQL解析器代碼: sql_lex.cc, sql_yacc.yy, sql_yacc.cc, sql_parse.cc等,實作了對SQL語句的解析操作。  

"handler"代碼: handle.cc, handler.h,定義了存儲引擎的接口。  

"item"代碼:item_func.cc, item_create.cc,定義了SQL解析後的各個部分。  

SQL語句執行代碼: sql_update.cc, sql_insert.cc sql_select.cc, sql_show.cc, sql_load.cc,執行SQL對應的語句。當你要看"SELECT ..."的執行的時候,直接到sql_select.cc去看就OK了。  

輔助代碼: net_serv.cc實作網絡操作  

還有其他很多代碼。

6、vio

    VIO意指Virtual I/O,主要用來處理各種網絡協定的IO。Virtual I/O使得各種子產品的網絡協定能夠無縫的調用I/O功能。MySQL網絡子系統将調用這裡的方法。

7、regex

    regex為MySQL提供執行正則比對函數REGEXP時的支援。

8、dbug

    使用with-debug參數編譯的MySQL會顯示dbug輸出,代碼中的所有.c和.cc檔案均可調用這個庫。

2、安裝目錄介紹:

On Windows, the default installation directory is C:\mysql, which has the following subdirectories:

Directory

Contents of Directory

bin

Client programs and the mysqld server

data

Log files, databases

Docs

Documentation

examples

Example programs and scripts

include

Include (header) files

lib

Libraries

scripts

Utility scripts

share

Error message files

Installations created from Linux RPM distributions result in files under the following system directories:

/usr/bin

Client programs and scripts

/usr/sbin

The mysqld server

/var/lib/mysql

/usr/share/doc/packages

include/usr/include/mysql

lib/usr/lib/mysql

/usr/share/mysql

Error message and character set files

sql-bench/usr/share/sql-bench

Benchmarks

On Unix, a tar file binary distribution is installed by unpacking it at the installation location you choose (typically/usr/local/mysql) and creates the following directories in that location:

docs

Documentation, ChangeLog

mysql_install_db

share/mysql

sql-bench

A source distribution is installed after you configure and compile it. By default, the installation step installs files under /usr/local, in the following subdirectories:

include/mysql

info

Documentation in Info format

lib/mysql

libexec

Benchmarks and crash-me test

var

Databases and log files

 轉:http://blog.csdn.net/cymm_liu/article/details/45822637

文章可以轉載,必須以連結形式标明出處。

本文轉自 張沖andy 部落格園部落格,原文連結:http://www.cnblogs.com/andy6/p/5789245.html   ,如需轉載請自行聯系原作者