码迷,mamicode.com
首页 > 数据库 > 详细

mysql体系架构。

时间:2015-07-08 14:55:58      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:配置文件   mysql   客户端   密码   网络   

1、初始化模块。

mysql启动的时候。初始化模块接管控制权。

初始化模块。读取配置文件。命令行参数。

分配全局内存缓存、初始化全局变量、结构信息、载入访问控制表、执行一些其他的初始化任务。

一旦初始化工作完成后,初始化模块把控制权交给连接管理器。开始接受客户端的连接。

读取配置文件的路径。

/usr/libexec/mysqld  --verbose --help | less

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 

2、连接管理模块。

初始化完成后。会把控制权给连接管理模块。

负责客户端的连接

当一个客户端的连接进来的时候,连接管理器执行一些网络协议任务。

并把控制权交给线程管理器。

3、线程管理模块。

连接管理器把控制权交给线程管理模块后。

线程管理模块,提高线程。这个线程可能是线程池里的。也可能是新建的。

一旦线程创建好之后,就把控制权交个用户模块。

4、用户模块。

一旦线程创建好之后,用户模块有了控制权。就会验证用户的

主机,用户,密码等。

验证成功后,就会把控制权交给命令分发器。

环境变量。

show global variables like ‘%connect%‘;

select @@max_connections;

服务器的最大连接数。

select @@max_user_connections;

当个用户的最大连接数。

实验:

set global max_connections=1;

select @@max_connections;

多开几个终端

会发现:ERROR 1040 (HY000): Too many connections


set global max_user_connections=1;

状态变量:

show global status like ‘%connect%‘;

Aborted_connects被拒绝的连接次数。比如用户,密码错误

Connections 被连接的次数。不管失败,成功都加1.

Max_used_connections 最大的并发量。不管失败,成功都加1.

5、命令分发器。

命令发过来后,会把控制权交给命令分发器。

如果是查询语句,就交给查询缓存模块

并把一些操作记录下来。日志记录模块。

如果是一个query类型的请求。会将控制权交个query解析器。query解析器首先分析是不是一个select类型

的query。如果是,则调用查询缓存模块。。让他检查改query在查询缓存中是否存储。

如果有,则直接将cache中的数据返回给连接线程模块。然后返回给客户端。

如果不是一个可以被cahce的query类型。或者cache中没有改query的数据,那么query将被进行传回给

query解析器。query解析器,把控制权给query分发器。

6、查询缓存模块

如果是查询语句,就交给查询缓存模块

7、日志记录模块。

命令分发器。调用日志记录模块。记录i日志

8、命令解析器。解析命令是什么命令。

如果是查询的话。=》查询优化器。

修改表。====》表变更模块

维护、优化===》表维护模块

复制===》复制模块

状态===》状态模块。

9、访问控制模块。

上面执行完后。就交给了访问控制模块。

验证用户,有没有相关权限。

10、表管理模块。

表锁


11、存储引擎接口。

存储引擎调用存储引擎。

12、存储引擎,干活的。


本文出自 “老蔡” 博客,请务必保留此出处http://877763363.blog.51cto.com/1200927/1671944

mysql体系架构。

标签:配置文件   mysql   客户端   密码   网络   

原文地址:http://877763363.blog.51cto.com/1200927/1671944

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!