《MySQL DBA 修炼之道》—— 第一章 入门篇

文章内容来源《MySQL DBA 修炼之道》

一、架构篇

1. 软件架构中数据库的定位

  • 数据库一般位于整个软件架构的后端,而不直接服务于用户。
  • 数据的展示、业务逻辑处理都是由程序来实现,例如Java。
  • 软件架构的分类 :
    • 双层架构 server-client : 如JDBC。
    • 三层架构 : 程序和数据库之间有一个中间服务器,如Web服务器,中间件,再由中间服务器转发请求给数据库服务器。这种模式称为"三层架构"。
  • 三层架构目前应用最广,探讨下:
    • (1)表现层 : 直接与用户交互的界面。
    • (2)业务逻辑层 : 负责业务逻辑与数据处理,也就是服务器,可以是PHP、Java EE、ASP.NET等应用服务。

网站处理网络访问请求的过程可能是这样的,由nginx接收用户请求,并将动态请求转发给后端的服务器,服务器处理完请求将结果返回给nginx,nginx再返回给用户,有时也称该层为中间件。

  • (3) 数据访问层:直接操作数据库,负责增加、删除、修改、查找等操作。

2. MySQL的基础架构

Mysql是一种关系型数据库产品。关系型数据库是建立在关系模型基础上的数据库。现实世界中,实体与实体之间都是有联系的,这种联系一般可以用关系模型来表示。

数据库产品架构一般可以分为应用层、逻辑层、物理层。

(1) 应用层:负责与客户端交互,建立连接、记住连接状态,响应请求,返回数据和控制信息。

(2)逻辑层 : 负责具体的查询、事务、存储、恢复等。

当客户端有用户发起查询请求时,数据库就会分配一个线程来处理,由【查询处理器】解析并生成执行计划,然后交给【执行器】执行,执行器有时需要访问更底层的【事务管理器、存储管理器】来操作数据;事务管理器主要负责事务管理与并发控制,其中确保事务的"ACID"特性,通过锁管理器来控制并发;存储管理器主要负责存储管理,其中日志管理器确保数据持久化,存储管理器还包括一个缓冲器,用它来确定磁盘和内存缓冲之间的数据传输。

(3)物理层:物理磁盘上的文件,包括日志文件、数据文件等。

参照图片,尝试理解一下:

  • Connection Pool:可以理解为应用层,负责连接建立,验证,保持连接等功能。
  • Management Service : 可以理解为逻辑处理层,负责调度其它组件,完成业务逻辑与数据处理。
  • Fiile System 与 Files & Logs :可以理解为物理层。也就是真正的物理文件。

3. 客户端与数据库交互过程架构图

(1) Client发布查询流程,调用Connetion Handler获取连接,发布查询。

(2)Connetion Handler,首先查询Query Cache,如果缓存中有结果集直接返回,没有结果集则调用Parser解析查询,再调用Optinizer优化器生成【执行计划】。

什么是执行计划?SQL是声明性语言。它只告诉数据库要查什么,但是怎么查却没讲。数据库要做的就是基于算法和统计信息计算出一条最优的访问路径,这个工作就是由优化器来完成的。

(3)然后运行执行计划,通过Pluggable Storage Engine API从存储引擎中获取数据,并返回给客户端。

4. MySQL权限

MySQL的权限包括两个方面。

(1) 服务器检查是否允许你连接

(2)假设可以连接,服务将检查你发出的每个请求,查看你是否有足够的权限实施它。

Mysql通过IP+端口、用户名、密码三要素来验证用户。

shell 复制代码
shell>mysql -h localhost -u root -proot1234 -P 3306
本机电脑还可以省略 -h -P
mysql -u root -proot1234

4.1 赋予权限和回收权限

程序账号有增加、删除、查询、修改这四项功能。

演示 : 赋予查询、插入、修改、删除权限,并进行密码设置。

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.%';

5. 长连接、短连接、线程池

当数据库服务器和客户端位于不同主机时,就需要建立网络连接来进行通信。

5.1 短连接

短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。简单来说:每次操作数据库都需要打开和关闭数据库连接。

短连接弊端:在慢速网络下使用短连接,连接开销就很大;在生产繁忙的系统中,连接也可能会受到系统端口的数的限制。(连接断开后,端口不会被马上回收利用,而是要经历FIN阶段的等待,直到可以被回收利用为止,这样就会导致端口资源不够用。

解决办法1 : 扩大端口数量

解决办法2 : MySQL配置监听多个IP地址,这样就增加了端口资源。

5.2 长连接

长连接指程序之间的连接在建立之后,就一直打开,被后续程序调用。使用长连接的初衷是减少连接的开销。

当受到一个永久连接的请求时,程序会检查是否存在一个相同的永久连接。如果存在,则直接将使用这个连接;如果不存在,则建立新的连接。所谓相同的连接,指的是相同的用户名和密码到相同主机的连接。

对于高并发的业务,推荐使用长连接或连接池。但是维持连接也是需要内存的。现代的操作系统可以拥几千个数据库连接,但是大部分都是睡眠状态的,这样的操作也会导致内存浪费。

对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,会造成性能问题,这是长短连接都无法解决的,所以应该进行合理的设计和优化来避免性能问题。

Java中有连接池技术。在研发的过程中,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索的就采用长连接。

5.3 连接池

由于数据库创建和销毁连接的开销很大,或者相对于执行的具体数据操作,连接所消耗的资源过多,此时就需要添加连接池来改进性能。

6. 存储引擎

InnoDB引擎

InnoDB 是MySQL默认引擎,它的优点:

  • 灾害恢复性好
  • 支持4种级别的事务,默认的事务隔离级别是可重复读,它的事务支持是通过多版本并发控制的MVCC。
  • 使用行级锁。
  • 对于InnoDB引擎中的表,其数据的物理组织形式是簇表,数据按照主键来组织,也就是说逐渐索引和数据是在一起的,数据按主键的顺序物理分布。
  • 实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取。
  • 支持外键。
  • 支持热备份。

7. MySQL的复制架构 主从模式

复制模式有以下几种:

  • 主从模式 A->B
  • 主主模式 A<-->B
  • 链式复制 A -> B -> C
  • 环形复制 A ->B -> C -> A

8. 基础概念

单点故障

单点故障指系统中的某个部分,一旦失败,将会导致整个系统无法工作。为了消除单点故障,一般需要增加冗余组件或冗余系统。比如服务器的电源冗余、网卡冗余、磁盘raid阵列、冗余的服务器,备用的数据中心等。如果要设计高可用的服务,单点故障时需要尽量避免的。

读写分离

由于数据库只能接受有限的读请求,对于读请求较多的应用,数据库可能会成为瓶颈,为了增加读的能力,提高扩展性,因此引入了读写分离技术。比如:利用复制技术配置多个从库,以承担更多的读请求,或者应用程序直接访问数据库,或者通过一个负载均衡软件分发读请求。写入操作和一些读操作仍然访问主库。由于MySQL的复制时异步的,所以要留意复制延时对于读写分离的影响。

相关推荐
drebander10 分钟前
MySQL 查询优化案例分享
数据库·mysql
初晴~26 分钟前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱5813631 分钟前
InnoDB 的页分裂和页合并
数据库·后端
YashanDB2 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
小林coding3 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
风间琉璃""3 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander3 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql
IvorySQL3 小时前
IvorySQL 4.0 发布:全面支持 PostgreSQL 17
数据库·postgresql·开源数据库·国产数据库·ivorysql
18号房客3 小时前
高级sql技巧进阶教程
大数据·数据库·数据仓库·sql·mysql·时序数据库·数据库架构