文章内容来源《MySQL DBA 修炼之道》
网站处理网络访问请求的过程可能是这样的,由nginx接收用户请求,并将动态请求转发给后端的服务器,服务器处理完请求将结果返回给nginx,nginx再返回给用户,有时也称该层为中间件。
Mysql是一种关系型数据库产品。关系型数据库是建立在关系模型基础上的数据库。现实世界中,实体与实体之间都是有联系的,这种联系一般可以用关系模型来表示。
数据库产品架构一般可以分为应用层、逻辑层、物理层。
(1) 应用层:负责与客户端交互,建立连接、记住连接状态,响应请求,返回数据和控制信息。
(2)逻辑层 : 负责具体的查询、事务、存储、恢复等。
当客户端有用户发起查询请求时,数据库就会分配一个线程来处理,由【查询处理器】解析并生成执行计划,然后交给【执行器】执行,执行器有时需要访问更底层的【事务管理器、存储管理器】来操作数据;事务管理器主要负责事务管理与并发控制,其中确保事务的“ACID”特性,通过锁管理器来控制并发;存储管理器主要负责存储管理,其中日志管理器确保数据持久化,存储管理器还包括一个缓冲器,用它来确定磁盘和内存缓冲之间的数据传输。
(3)物理层:物理磁盘上的文件,包括日志文件、数据文件等。
参照图片,尝试理解一下:
(1) Client发布查询流程,调用Connetion Handler获取连接,发布查询。
(2)Connetion Handler,首先查询Query Cache,如果缓存中有结果集直接返回,没有结果集则调用Parser解析查询,再调用Optinizer优化器生成【执行计划】。
什么是执行计划?SQL是声明性语言。它只告诉数据库要查什么,但是怎么查却没讲。数据库要做的就是基于算法和统计信息计算出一条最优的访问路径,这个工作就是由优化器来完成的。
(3)然后运行执行计划,通过Pluggable Storage Engine API从存储引擎中获取数据,并返回给客户端。
MySQL的权限包括两个方面。
(1) 服务器检查是否允许你连接
(2)假设可以连接,服务将检查你发出的每个请求,查看你是否有足够的权限实施它。
Mysql通过IP+端口、用户名、密码三要素来验证用户。
shell>mysql -h localhost -u root -proot1234 -P 3306 本机电脑还可以省略 -h -P mysql -u root -proot1234
程序账号有增加、删除、查询、修改这四项功能。
演示 : 赋予查询、插入、修改、删除权限,并进行密码设置。
mysql>grant select,insert,update,delete on db_name.* to username@'10.%' identified by 'password';
回收上面所赋予的权限
mysql>revoke select,insert,update,delete on db_name.* from username@'10.%';
当数据库服务器和客户端位于不同主机时,就需要建立网络连接来进行通信。
短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。简单来说:每次操作数据库都需要打开和关闭数据库连接。
短连接弊端:在慢速网络下使用短连接,连接开销就很大;在生产繁忙的系统中,连接也可能会受到系统端口的数的限制。(连接断开后,端口不会被马上回收利用,而是要经历FIN阶段的等待,直到可以被回收利用为止,这样就会导致端口资源不够用。
解决办法1 : 扩大端口数量
解决办法2 : MySQL配置监听多个IP地址,这样就增加了端口资源。
长连接指程序之间的连接在建立之后,就一直打开,被后续程序调用。使用长连接的初衷是减少连接的开销。
当受到一个永久连接的请求时,程序会检查是否存在一个相同的永久连接。如果存在,则直接将使用这个连接;如果不存在,则建立新的连接。所谓相同的连接,指的是相同的用户名和密码到相同主机的连接。
对于高并发的业务,推荐使用长连接或连接池。但是维持连接也是需要内存的。现代的操作系统可以拥几千个数据库连接,但是大部分都是睡眠状态的,这样的操作也会导致内存浪费。
对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,会造成性能问题,这是长短连接都无法解决的,所以应该进行合理的设计和优化来避免性能问题。
Java中有连接池技术。在研发的过程中,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索的就采用长连接。
由于数据库创建和销毁连接的开销很大,或者相对于执行的具体数据操作,连接所消耗的资源过多,此时就需要添加连接池来改进性能。
InnoDB 是MySQL默认引擎,它的优点:
复制模式有以下几种:
单点故障指系统中的某个部分,一旦失败,将会导致整个系统无法工作。为了消除单点故障,一般需要增加冗余组件或冗余系统。比如服务器的电源冗余、网卡冗余、磁盘raid阵列、冗余的服务器,备用的数据中心等。如果要设计高可用的服务,单点故障时需要尽量避免的。
由于数据库只能接受有限的读请求,对于读请求较多的应用,数据库可能会成为瓶颈,为了增加读的能力,提高扩展性,因此引入了读写分离技术。比如:利用复制技术配置多个从库,以承担更多的读请求,或者应用程序直接访问数据库,或者通过一个负载均衡软件分发读请求。写入操作和一些读操作仍然访问主库。由于MySQL的复制时异步的,所以要留意复制延时对于读写分离的影响。
上一篇:常见的NLP处理框架介绍!