Mysql数据库服务器架构_MySQL服务器架构介绍

作为一个MySQL DBA,了解一下MySQL的整体架构是非常必要的,本文将以MySQL5.7为例结合企业版本为大家介绍MySQL数据库服务器架构。当然数据库架构里面的内容比较多,这里主要是对一些核心插件做一些介绍。

整体架构如下图所示:

3b135e28e4d3e2f0151184d61b53dc0a.png

我们的这篇文章就基于上图进行展开讨论。如上图所示,黄色区块代表的是社区版和企业版都有的功能,而红色区块表示的是只有企业版里才有的功能,椭圆和圆柱体表示的是该功能是插件形态,而方形(圆角方形)表示的是其他一些功能 。该图的版本基础MySQL5.7.20制作,其中包含了防火墙和审计功能等一些企业版新特性的介绍。

如上图所示,MySQL服务器最顶端是各种各样的连接器和连接API,用于应用程序能够连接到MySQL。我们常用的mysql client使用的是C语言开发的API,在上图中我们也是可以体现出来。除此之外当然还有很多其他的连接器,这里没有标注出来,如果有兴趣可以参考官方文档即可。

中间那块比较大的深色区域代表的是服务器端,该区域最上层是连接处理器(connection handing),连接处理器有两种方式,第一种是最原始的方式,每个连接创建一个线程,这种方式下当收到请求后会简单的为每个连接创建一个线程,这个也是社区版的连接方式。另一种就是高大上的线程池方式,线程池是企业版里的插件, 这种方式可以通过线程的重用来控制线程的总数,大大减少了重复创建线程的开销,线程池非常适合于数据库大量查询但是单个查询都非常快的场景,使用线程池大大提高数据库查询的扩展性和性能。

60x Better Scalability: Read/Write

25238db11b413772f0f26a17b9944a5d.png

18x Better Scalability: Read Only

1b661abbdcbe2d5215cb5fc3c86feed4.png

上面介绍了连接处理器,在连接处理器处理完线程之后,会发送到连接控制器插件(也就是权限认证)。在这里会对连接进行权限和密码的验证,如果你多次使用错误密码连接数据库,那么连接控制器就会杀掉这个连接。对连接控制器的插件介绍请参考官方文档章节:https://dev.mysql.com/doc/refman/5.7/en/connection-control-plugin.html

如果权限认证通过,并且你开启了查询缓存,并且是select语句的话,那么将会到达查询缓存(Query Cache,通常被叫做QC),QC对于大部分情况比较鸡肋,并且开销比较大,线上环境不建议开启,该功能在8.0.3及之后版本被官方废除了。

经过QC,然后到达了查询重写插件(Query Rewrite Plugin,简称QR),QR是5.7.6之后添加的一个可选插件,详细介绍请参考官方介绍:https://dev.mysql.com/doc/refman/5.7/en/rewriter-query-rewrite-plugin.html 。DBA根据查询的性能数据报告指定哪些查询开启重写。例如我们可以将SELECT。该功能允许 130 更改为 SELECT * FROM world.City WHERE ID = 130,对于其他的ID也可以使用此规则,那么我们可以在MySQL添加如下规则(使用该规则的前提的查询重写插件已经被正确安装):

INSERT INTO query_rewrite.rewrite_rules (pattern, replacement)

VALUES (‘SELECT ?’, ‘SELECT * FROM world.City WHERE ID = ?’);

CALL query_rewrite.flush_rewrite_rules();

经过上面的各个环节,实际查询语句将会到达SQL解析器(如果查询在查询缓存中匹配,将不会到这一步)。 在解析器处理了查询之后,数据库将会知道查询哪个表,将有哪些字段,哪些数据被查询,这意味着也可以验证用户是否被允许使用这些对象。

解析器解析SQL之后,如果MySQL Enterprise Firewall已经安装并启用,它将被调用。 防火墙将查询的SQL样本与白名单进行比较,查询是否在白名单中。 如果查询不在白名单中,则可以记录或阻止(取决于配置)。

最后一个插件是MySQL企业审计插件。 在MySQL 5.7.20和更高版本中,除了记录访问之外,审计日志还可以用来阻止对数据库或表的访问。该插件会检查访问是否被允许。

经过上述插件后,SQL到达查询优化器,在优化器会进行SQL的内部优化,例如SQL内部调整重新,成本规则计算,索引选择等等。经过优化器处理之后,最终交给执行器进行SQL执行,并将结果发送给客户端。

转载需授权,未经授权禁止转载。关注公众号获得更多干货信息:

c85cfcf994727db89686fe4929bc894b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值