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。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 是一种关系型数据库管理系统,常用于存储数据。在 Python ,我们可以使用 MySQL 客户端库来连接 MySQL 数据库,并进行增删改查等操作。 下面是一个简单的 MySQL 数据库模块实现,它包括连接数据库、创建表、插入数据、查询数据等基本操作: ```python import mysql.connector class MySQLDB: def __init__(self, host, user, password, database): self.host = host self.user = user self.password = password self.database = database self.connection = None def connect(self): self.connection = mysql.connector.connect( host=self.host, user=self.user, password=self.password, database=self.database ) def create_table(self, table_name, columns): cursor = self.connection.cursor() columns_str = ', '.join([f'{col_name} {col_type}' for col_name, col_type in columns.items()]) cursor.execute(f'CREATE TABLE {table_name} ({columns_str})') self.connection.commit() def insert_data(self, table_name, data): cursor = self.connection.cursor() placeholders = ', '.join(['%s'] * len(data)) values = tuple(data.values()) columns = ', '.join(data.keys()) cursor.execute(f'INSERT INTO {table_name} ({columns}) VALUES ({placeholders})', values) self.connection.commit() def query_data(self, table_name, columns=None, where=None): cursor = self.connection.cursor() columns_str = '*' if columns is None else ', '.join(columns) where_str = '' if where is None else f'WHERE {where}' cursor.execute(f'SELECT {columns_str} FROM {table_name} {where_str}') results = cursor.fetchall() return results ``` 使用示例: ```python # 连接数据库 db = MySQLDB(host='localhost', user='root', password='password', database='my_database') db.connect() # 创建表 columns = {'id': 'INT AUTO_INCREMENT PRIMARY KEY', 'name': 'VARCHAR(255)', 'age': 'INT'} db.create_table('my_table', columns) # 插入数据 data = {'name': 'John', 'age': 25} db.insert_data('my_table', data) # 查询数据 results = db.query_data('my_table') for result in results: print(result) ``` 需要注意的是,此处使用了 `mysql-connector-python` 库来连接 MySQL 数据库。在使用之前需要先安装该库: ``` pip install mysql-connector-python ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值