Maridb/mysql 源码阅读1

转自 http://blog.csdn.net/theorytree/article/details/7335612

MySQL服务器的main()在/sql/main.cc,实际的入口点在/sql/mysqld.cc。

我们直接从mysqld_main()开始阅读。

先理解一些比较重要的宏定义:

(1)宏HAVE_NPTL:

这个宏如果打开了会去读一个系统变量LD_ASSUME_KERNEL,并把他赋给一个全局变量ld_assume_kernel_is_set,这个系统变量设置了系统线程的实现模型。linux内核在2.6版本后,缺省的线程模型是NPTL。

http://blog.csdn.net/theorytree/article/details/7336523    详细情况请阅读我博客里的这篇文章。

对于以HAVE_前缀的的宏,另有如下文章阐述:

http://blog.csdn.net/theorytree/article/details/7337692  这里介绍了CMake的相关知识,通过CMake在影子编译目录的include目录里面生成了my_config.h文件。

my_config.h文件通过my_global.h文件包含到具体的需要使用HAVE_前缀的宏的源文件中。

(2)EMBEDDED_LIBRARY

该宏用于控制  嵌入式库和客户端/服务器版本不同的那部分代码。

Mysql 可以编译为一个libmysqld库(嵌入式服务器),使用嵌入式MySQL服务器库,能够在客户端应用程序中使用具备全部特性的MySQL服务器。

主要优点在于,增加了速度,并使得嵌入式应用程序的管理更简单。嵌入式服务器库是以MySQL的客户端/服务器版本为基础的,采用C/C++语言编写。 其结果是嵌入式服务器也是用C/C++语言编写的。 在其他语言中,嵌入式服务器不可用。

这个宏可以通过CMake配置,

-DWITH_EMBEDDED_SERVER=1 打开这个宏

在plug.cmake函数里有它的定义:

PROPERTIES COMPILE_DEFINITIONS "MYSQL_SERVER;EMBEDDED_LIBRARY")

整个代码的流程如下:我们讲分更细的文章详细介绍每部分:

Mysql服务器监听:

Mysql的总体结构图

Mysql 源代码的目录结构 :(以下来自官方文档)

/BUILD The compilation configuration and make files for all platforms supported.
Use this folder for compilation and linking.

/client The MySQL command-line client tool.

/dbug Utilities for use in debugging (see Chapter 5 for more details).

/Docs Documentation for the current release. Linux users should usegenerate-text-files.pl in the support subfolder to generate the documentation. Windows users are provided with a manual.chm file.

/include The base system include files and headers.

/libmysql The C client API used for creating embedded systems. (See Chapter 6 formore details.)

/libmysqld The core server API files. Also used in creating embedded systems.(See Chapter 6 for more details.)

/mysql-test The MySQL system test suite. (See Chapter 4 for more details.)

/mysys The majority of the core operating system API wrappers and helper functions.

/regex A regular expression library. Used in the query optimizer and execution to resolve expressions.

/scripts A set of shell script-based utilities.

/sql The main system code. You should start your exploration from this folder.

/sql-bench A set of benchmarking utilities.

/SSL A set of Secure Socket Layer utilities and definitions.

/storage The MySQL pluggable storage engine source code is located inside this folder. Also included is the storage engine example code. (See Chapter 7 for more details.)

/strings The core string handling wrappers. Use these for all of your string handling needs.

/support-files A set of preconfigured configuration files for compiling with different options.

/tests A set of test programs and test files.

/vio The network and socket layer code.

/zlib Data compression tools.

时间: 2024-10-21 02:08:21

Maridb/mysql 源码阅读1的相关文章

maridb\mysql 源码安装,以10.1.26版本为例

mysql 源码安装(mariadb 10.1.26) 1.环境部署 1 安装cmake 源码安装三部曲或者yum install cmake 2安装依赖包yum install -y ncurses-devel openssl-devel openssl gcc gcc-c++ readline-devel zlib-devel libaio-devel libxml2-devel libcurl-devel libarchive-devel boost boost-develyum grou

如何阅读Java源码 阅读java的真实体会

刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它.我文中会专门谈到这个,暂时不展开. 强烈

CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发

Java源码阅读的真实体会

原文:http://zwchen.iteye.com/blog/1154193 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的

深入MySQL源码 学习方法 何登成专家

MYSQL 技术圈 有哪些做得好,又注重分享的公司: Oracle MySQL, MariaDB, Percona,Google, FB, Twitter, Taobao, NetEase… 有哪些值得关注的个人: Mark Callaghan. Jeremy Cole. Dimitri. Peter ,Zaitsev. Yoshinori Matsunobu … 微博上有哪些值得关注的账号: @姜承尧. @淘宝丁奇. @plinux. @那海蓝蓝 … 业界有哪些好的会议: Percona Li

淘宝数据库OceanBase SQL编译器部分 源码阅读--Schema模式

淘宝数据库OceanBase SQL编译器部分 源码阅读--Schema模式 什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User?我们可以可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的柜子,行和列就是柜子中的格子.User就是房间的主人.简单来说,Schema是包括表,列,索引,视图等数据库对象的集合. OceanBase中的强Sche

[收藏] Java源码阅读的真实体会

收藏自http://www.iteye.com/topic/1113732 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃<Core Java>,你是很难从中吸收到营养的,特别是<深入Java虚拟机>这类书,别人觉得好,未必适合现在的你. 虽然Tomcat的源码

MySQL源码编译安装

1.安装cmake-2.8.10.2.tar.gz 以root用户进入shell #tar -zxvf  cmake-2.8.10.2.tar.gz #cd cmake-2.8.10.2 #./configure #make                         (无法make,检测gcc编译环境) #make install --------------------------------- 2.安装ncurses-5.9.tar.gz #tar -zxvf  ncurses-5.9

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index