`
mafish
  • 浏览: 10258 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL 中的模块

阅读更多

由于工作需要,需要了解数据库中权限管理模块的工作机制,因此开始看 MySQL 的代码。在网上找到一本电子书“Understanding MySQL Internals”,以下的内容主要来自该电子书。

MySQL 代码中的主要模块包括:

Server Initialization Module
sql/mysqld.cc

init_common_variables()
init_thread_environment()
init_server_components()
grant_init() in sql/sql_acl.cc
init_slave() in sql/slave.cc
get_options()

connection manager
connection manager 监听 client 发起的连接,并将请求发送给 Thread Manager. 这个模块只是 sql/mysqld.cc 中的一个函数:handle_connections_sockets().

Thread Manager
The Thread Manager 负责跟踪线程,并保证为每一从 client 发起的连接分配一个线程。这个模块很小,大部分的代码都在 sql/mysqld.cc 中。入口是create_new_thread()。另外一个函数是 start_cached_thread()。

Connection Thread
Connection Thread 是处理一 client 请求的核心。在 sql/sql_parse.cc 中有 一个函数 handle_one_connection() in sql/sql_parse.cc

User Authentication Module
User Authentication Module 负责验证连接用户,并初始化和这个用户相对应 的权限的结构和变量。模块的入口是 sql/sql_parse.cc 中的 check_connection()。其他的部分在 sql/sql-acl.cc 和 sql/password.cc 中 。其他的一些函数还包括:
acl_check_host() in sql/sql_acl.cc
create_random_string() in sql/password.cc
check_user() in sql/sql_parse.cc
acl_getroot() in sql/sql_acl.cc

Access Control Module
Access Control Module 验证客户端用户是否拥有足够的权限去进行某项操作。 大部分的代码在 sql/sql_acl.cc 中。但是,一个最常用的函数, check_access() 在 sql/sql_parse.cc 中。和该模块相关的函数还包括 sql/sql_acl.cc 中的:
check_grant()
check_table_access() in sql/sql_parse.cc
check_grant_column()
acl_get()

Parser
Parser 负责解析请求并生成解析树。入口为 sql/sql_parse.cc 中的 mysql_parse()。

Command Dispatcher
Command Dispatcher 负责将请求定向至底层的模块。它包含 sql/sql_parse.cc 中的两个函数 do_command() and dispatch_command().

Query Cache Module
Query Cache Module 负责缓存查询结果,并尽可能的使用到缓存结果以加速查 询到执行过程。它在 sql/sql_cache.cc 中实现。
Query_cache::store_query()
Query_cache::send_result_to_client()

Optimizer
负责为查询制定最好的策略并执行查询。它可能是 mysql 中最复杂的模块,入 口是 mysql_select() in sql/sql_select.cc(这个文件有 14324行)。其他的一 些函数和方法包括:
JOIN::prepare()
JOIN::optimize()
JOIN::exec()
make_join_statistics()
find_best_combination()
optimize_cond()

Table Manager
Table Manager 负责创建、读取以及修改 table 定义文件(扩展名为 .frm),维 护一个 table descriptor 的缓存,称为 table cache,并维护 table 级的锁 。 大部分的代码在 sql/sql_base.cc,sql/table.cc,sql/unireg.cc 和 sql/lock.cc 中。一些函数包括:
openfrm() in sql/table.cc
mysql_create_frm() in sql/unireg.cc
open_table() in sql/sql_base.cc
open_tables() in sql/sql_base.cc
open_ltable() in sql/sql_base.cc
mysql_lock_table() in sql/lock.cc

Table Modification Modules
这个模块集负责 creating, deleting, renaming, dropping, updating, or inserting into a table。 入口包括:
mysql_update() and mysql_multi_update() in sql/sql_update.cc
mysql_insert() in sql/sql_insert.cc
mysql_create_table() in sql/sql_table.cc
mysql_alter_table() in sql/sql_table.cc
mysql_rm_table() in sql/sql_table.cc
mysql_delete() in sql/sql_delete.cc

Table Maintenance Module
负责 table 的维护操作,比如检查、修复、备份、恢复、优化和分析。代码在 sql/sql_table.cc 中。核心函数是 mysql_admin_table(),还包括:
mysql_check_table()
mysql_repair_table()
mysql_backup_table()
mysql_optimize_table()
mysql_analyze_table()

Status Reporting Module

负责回答一些关于服务器配置、性能变量、table 结构信息、复制进度、table cache 的状态等查询。它处理以 SHOW 开头等查询。大部分的代码在 sql/sql_show.cc 中,还包括:
mysqld_list_processes()
mysqld_show()
mysqld_show_create()
mysqld_show_fields()
mysqld_show_open_tables()
mysqld_show_warning()
show_master_info() in sql/slave.cc
show_binlog_info() in sql/sql_repl.cc

Abstracted Storage Engine Interface(Table Handler)
这个模块是一个抽象类,名为 handler,包含一个名为 handlerton 的数据结构 。这个数据结构是在 5.1 版中为了 plug-in 集成而加入的。

这个模块是为了集成 Berkeley DB 中的 tables 而加入的。这个改变带来了长 远的影响:现在很多底层存储引擎都可以方便的集成在 MySQL 中。

Storage Engine Implementations(MyISAM, InnoDB, Memory, BerkeleyDB)
每一个存储引擎实现了标准的接口。

Logging Module
The Logging Module 负责维护高层(逻辑层)的日志。存储引擎有可能维护它自己的底层(物理或者逻辑层)的日志。

Replication Master Module
负责 master 上的复制功能。

Replication Slave Module
负责 slave 上的复制功能。

Client/server Protocol API
MySQL client/server 通讯协议建立在操作系统的协议之上(TCP/IP)。代码在 sql/protocol.cc, sql/protocol.h 和 sql/net_serv.cc,函数包括:
my_net_read in sql/net_serv.cc
my_net_write() in sql/net_serv.cc
net_store_data() in sql/protocol.cc
send_ok() in sql/protocol.cc
send_error() in sql/protocol.cc

Core API
是 MySQL 中的瑞士军刀。

THD class
THD 定义了一个线程描述符,它包含了和正在处理特定请求的线程相关的信息。 每一个客户连接都被一个线程处理。每个线程有一个描述符对象。处理客户请求 的时候并不是创建线程的唯一时刻。MySQL 有一组系统线程,例如 replication  slave 线程和 delayed insert 线程。并且,存在一些特殊的情况,只创建线程 描述符而没有线程--在安装的过程,server 运行在 bootstrap 模式下来创建必需的系统 tables。

 

分享到:
评论

相关推荐

    易语言MySql5.0类模块源码

    易语言MySql5.0类模块源码是一个用于在易语言环境中访问MySQL数据库的软件开发资源。这个类模块是基于libmySQL.dll5.0,这是一个由MySQL官方提供的动态链接库,它允许开发者通过编程接口(API)与MySQL服务器进行...

    nodejs封装好的mysql数据库模块,带mysql连接池以及百万测试数据

    在本模块中,使用了`mysql2`库提供的连接池功能。 3. **dbUtils.js**:这个文件很可能是封装数据库操作的工具类。它可能包含了初始化连接池、执行SQL语句、处理结果集等通用功能。通过这样的封装,可以简化代码,...

    易语言MySql5.0类模块

    易语言MySql5.0类模块源码,MySql5.0类模块,取指针文本,取指针字节集,置连接选项,连接,断开,检测连接,关闭,取数据库句柄,置数据库句柄,执行SQL语句,执行SQL,取记录集,取记录集一行,读一行,读一行字节集,读一行文本,读...

    MySQL各个模块的关系图

    MySQL各个模块的关系图、Blog中的链接图片,请各位放心下载

    易语言PHP操作MySQL模块源码

    【标题】"易语言PHP操作MySQL模块源码"是一个针对初学者和专业开发者的资源,它提供了使用易语言(E语言)编写PHP代码来与MySQL数据库进行交互的源码示例。这个模块使得在易语言环境中进行数据库开发变得更加便捷,...

    mysql项目的一些模块

    在MySQL项目中,模块是构建复杂系统的基本构造单元,它们负责特定的功能或子系统,使得整个数据库管理系统能够高效、稳定地运行。以下是对"mysql项目的一些模块"的详细解释: 1. **存储引擎**:MySQL支持多种存储...

    python连接mysql模块mysql-connector-python

    Python中的`mysql-connector-python`模块是MySQL数据库与Python编程语言之间的一个桥梁,它使得Python开发者能够方便地连接、操作和管理MySQL数据库。这个模块是由MySQL官方提供的,因此具有较高的可靠性和兼容性。...

    易语言 mysql 模块 mysql是列子

    这个模块很好,很强大,很强大,推荐给大家使用,

    易语言MYSQL连接池模块

    易语言MYSQL连接池模块源码,MYSQL连接池模块,GetThis,初始化,关闭类线程,线程_测试,其他_附加文本,连接池初始化,取mysql句柄,释放mysql句柄,取空闲句柄数,销毁连接池,取_类_函数地址,取指针内容_整数,取变量地址_...

    DBD-Mysql模块

    DBD-Mysql模块是Perl编程语言中用于连接和操作MySQL数据库的一个重要接口。它提供了对MySQL数据库的强大支持,使得Perl程序员能够轻松地进行数据查询、更新、插入和删除等操作。这个模块是Perl DBI(Database ...

    nodejs+mysql模块化实例代码

    总结一下,这个`nodejs+mysql模块化实例代码`展示了如何在Node.js项目中通过模块化的方式来管理数据库操作。通过创建一个独立的`db.js`文件来封装连接逻辑,我们可以轻松地在多个模块中重用数据库连接,并且使用...

    python操作MySQL的MySQLdb模块

    Python中的MySQLdb模块是连接和操作MySQL数据库的一个重要工具,尤其在Python 2.x版本中广泛使用。这个模块是Python的DB-API(数据库应用编程接口)的一个实现,它提供了与MySQL交互的一系列函数和类。下面我们将...

    包含了MySql模块和Express的nodejs

    包含了MySql模块和Express的nodejs,局域网无法使用npm命令只能在外网安装好后打包使用

    perl 模块(spreadsheet、XML::Simple、DBB::mysql等模块)

    在标题和描述中提到的几个模块——Spreadsheet、XML::Simple以及DBD::mysql,分别对应了处理电子表格、解析XML文档以及与MySQL数据库交互的功能。 1. Spreadsheet模块:这个模块主要用于读取和写入电子表格文件。在...

    mysql连接模块 mysql.connector

    import mysql.connector config={'host':'127.0.0.1', 'user':'root', 'password':'root', 'port':'3306', 'database':'abcd' } try: cnn=mysql.connector.connect(**config) print('数据库连接成功!') ...

    易语言MySql数据库操作类V1.0模块

    易语言MySql数据库操作类V1.0模块源码,MySql数据库操作类V1.0模块,MySql数据库连接类_测试子程序,置连接选项,连接,关闭,是否已连接,取连接句柄,置连接句柄,执行SQL,引擎版本,最后错误,取错误代码,选择库,创建库,删除...

    易语言源码MySql类模块源码.rar

    在这个MySQL类模块中,可能会有如下的关键函数或方法: 1. `连接数据库`:用于建立与MySQL服务器的连接,可能需要输入如主机名、用户名、密码和数据库名称等参数。 2. `断开连接`:结束与数据库的连接,释放相关...

Global site tag (gtag.js) - Google Analytics