五、mysql 数据库体系结构

目录

MySQL体系结构

一、MySQL的Server层有七个组件 

1、MySQL 向外提供的交互接口(Connectors)

2、连接池组件(Connection Pool)

3、管理服务组件和工具组件(Management Service & Utilities)

4、SQL 接口组件(SQL Interface)

5、查询分析器组件(Parser)

6、优化器组件(Optimizer)

7、查询缓存组件(Query Caches & Buffers)

二、MySQL存储引擎

三、工作流程

四、mysql主要文件


MySQL体系结构

MySQL 可以分为 Server 层和存储引擎层两部分。

        Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

        而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。从 MySQL 5.5.5 版本开始InnoDB成为了默认存储引擎。同存储引擎的表数据存取方式不同,支持的功能也不同。

一、MySQL的Server层有七个组件 

1、MySQL 向外提供的交互接口(Connectors)

        connections组件是mysql向外提供的交互组件,可以通过该组件来操作mysql语句,实现交互,建立连接之后,可以通过 show processlist,语句查看已经建立的连接。

(root@localhost) [(none)]> show PROCESSLIST;
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time  | State                  | Info             |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
|  4 | event_scheduler | localhost | NULL | Daemon  | 20864 | Waiting on empty queue | NULL             |
|  8 | root            | localhost | NULL | Query   |     0 | starting               | show PROCESSLIST |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
连接之后,如果太长时间没有动静,连接器就会自动断开,默认8小时
(root@localhost) [(none)]> show variables like '%timeout%';
+-----------------------------------+----------+
| Variable_name                     | Value    |
+-----------------------------------+----------+| interactive_timeout               | 28800    | 服务器关闭交互式连接前等待活动的秒数| wait_timeout                      | 28800    | 服务器关闭非交互连接之前等待活动的秒数
+-----------------------------------+----------+
当只改wait_timeout 是不能改interactive_timeout的,wait_timeout是修改session变量,是不起作用的,当关闭此次会话,退出mysql ,重新登录发现还是原来的值:但若只改interactive_timeout,wait_timeout也会跟着改。所以修改global的interactive_timeout参数,可以真正调整超时时间。
linux的服务器上的mysql:
set global interactive_timeout=31536000;
show VARIABLES like ‘%timeout%’;

2、连接池组件(Connection Pool)

        负责监听客户端向mysql服务器端的各种请求,接收请求,转发请求,到目标模块,每个成功连接mysql的客户端请求都会被创建或分配一个线层,该线程负责客户端与mysql服务器端的通信,接收客户端的命令,传递服务器端的结果信息等。

3、管理服务组件和工具组件(Management Service & Utilities)

        提供对MySOL的集成管理,如备份(Backup)、恢复(Recovery)、安全管理(Security)等。

4、SQL 接口组件(SQL Interface)

        接收用户SQL命令,如DML、DDL和存储过程等,并将最终结果返回给用户。

5、查询分析器组件(Parser)

        系统在执行输入语句之前,必须分析出语句想要干什么。例如:首先通过select关键字得知这是一条查询命令,还包括分析要查询的是哪张表以及查询条件是什么。同时,分析器必须分析输入语句的语法正确性。

6、优化器组件(Optimizer)

        优化器是MySQL用来对输人语句在执行之前所做的最后一步优化。优化内容包括:是否选择索引、选择哪个索引、多表查询的联合顺序等。每一种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一种方案。

7、查询缓存组件(Query Caches & Buffers)

        在每一次查询时,MySQL 都先去看看是否命中缓存,命中则直接返回,提高了系统的响应速度。但是这个功能有一个相当大的弊病,那就是一旦这个表中数据发生更改,那么这张表对应的所有缓存都会失效。

二、MySQL存储引擎

        mysql存储引擎负责数据的存储和提取,架构模式是插件式的。支持innoDB等多个存储引擎。

查看当前支持的存储引擎
(root@localhost) [test]> show engines;

 InnoDB 存储引擎

        InnoDB是MySQL的默认存储引擎,它支持ACID(原子性、一致性、隔离性和持久性)事务,并提供了行级锁定、外键约束和崩溃恢复等功能。它适用于大多数应用场景,特别是需要事务支持和高并发读写操作的应用。

特性:

  1. 事务支持:InnoDB引擎支持事务的ACID属性,确保了数据的原子性、一致性、隔离性和持久性。这意味着可以使用BEGIN、COMMIT和ROLLBACK语句来管理事务,保证数据的完整性和一致性。
  2. 行级锁定:InnoDB使用行级锁来处理并发访问和修改数据,而不是表级锁。这意味着多个事务可以同时访问同一表的不同行,提高了并发性能和并发控制。
  3. 外键约束:InnoDB支持外键约束,可以在数据库层面实现数据的一致性和完整性。它提供了CASCADE、RESTRICT和SET NULL等选项来处理外键关系。
  4. 崩溃恢复:InnoDB具有崩溃恢复的能力,即使在系统崩溃或电源故障的情况下,也可以保证数据的完整性。它通过事务日志(redo log)来恢复未完成的事务和恢复已提交的事务。
  5. 自动增长列:InnoDB支持自动增长列,可以为表中的某一列指定自动递增的整数值,简化了数据插入操作。
  6. 回滚段:InnoDB通过回滚段(Rollback Segment)来存储未提交事务的数据,以便在需要时进行回滚操作。
  7. 可以在线热备份:InnoDB引擎支持在线热备份,可以在不停止MySQL服务器的情况下备份数据库。
  8. 支持MVCC(多版本并发控制):InnoDB使用多版本并发控制来处理并发事务,在读操作的同时允许写操作,并通过行版本来实现数据的隔离性和一致性。
  9. 高性能:InnoDB引擎通过使用缓冲池(Buffer Pool)来缓存热门数据和索引,提高读取数据的性能。

三、工作流程

四、mysql主要文件

1、数据库配置文件 my.cnf

2、表结构定义文件

        每创建一张表都会有一个frm后缀的文件,就是表结构的定义文件。show create table user\G

        如果没有连接mysql。可以使用 mysqlfrm工具 可以解析 frm结尾的文件

        mysqlfrm --diagnostic

3、错误文件 mysql.err

(root@localhost) [mysql]> SHOW VARIABLES LIKE 'log_error';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+

4、慢查询日志文件 slow_log

        将运行超过某个时间阈值的sql语句记录到文件

        MySQL5.1开始可以以毫秒为单位记录运行的sql

        MySQL5.5开始可以将慢查询保存到表

        mysql5.7 将时区信息写入到查询日志

慢查询相关参数:

1、slow_query_log = on //是否开启慢查询
2、slow_query_log_file = slow.log //慢查询日志文件名
3、long_query_time = 3 //指定慢查询的阈值
4、min_examined_row_limit = 100 //扫描行数少于该值的sql不记录到慢查询日志
5、log_queries_not_using_indexes //将没有使用索引的sql记录到慢查询日志
6、log_throttle_querles_not_using_indexes //限制每分钟记录没有使用索引sql语句的次数
7、log_output = FILE //慢查询日志的格式   file、table、none//默认是 FILE 文件格式,也可以保存到表中,在mysql 这个库里边 slow_log 、general_log//就是说 将log_output 设置为table 的话,就会保存在slow_log这张表里。set global log_output = table;
8、log_slow_slave_statements://在从服务器上开启慢查询
9、log_timestamps = system //写入时区信息
//在 my.cnf配置文件添加完之后  重启mysql数据库生效
(root@localhost) [mysql]> show variables like 'slow%';
+---------------------+------------------------------------+
| Variable_name       | Value                              |
+---------------------+------------------------------------+
| slow_launch_time    | 2                                  |
| slow_query_log      | OFF                                |
| slow_query_log_file | /var/lib/mysql/rabbitmq_1-slow.log |
+---------------------+------------------------------------+
// select sleep(10);测试
//也可以在库中直接修改
(root@localhost) [mysql]> set global slow_query_log = 1;
(root@localhost) [mysql]> set global slow_query_log_file = slow.log
(root@localhost) [mysql]> set global long_query_time =2;
//如果这个日志文件特别大,怎么在线删除?
1、先把slow.log备份一下,但是备份完之后,日志还是会写进这个文件,
2、需要 刷新下 flush slow logs
3、这时候会关闭之前的日志文件,会重新写入一个slow日志

测试慢查询:

有些时候,sql执行时间过长但是并没有记录到慢查询日志中去
比如:
(root@localhost) [mysql]> create database test;Query OK, 1 row affected (10.00 sec)
(root@localhost) [mysql]> use test;
Database changed
(root@localhost) [test]> create table a (a int primary key,b int);
Query OK, 0 rows affected (0.02 sec)
(root@localhost) [test]> select * from a where a =1;
+---+------+
| a | b    |
+---+------+
| 1 |    1 |
+---+------+
1 row in set (0.00 sec)
//加锁
(root@localhost) [test]> begin;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [test]> select * from a where a =1 for update;
(root@localhost) [test]> commit;//然后在开一个会话,执行下update操作,就会发现 此时执行的sql一直在等待。在上一个会话中,执行commit  之后,这条sql才会被执行
(root@localhost) [test]> begin;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [test]> update a set b = b+1 where a =1;
Query OK, 1 row affected (7.84 sec)
Rows matched: 1  Changed: 1  Warnings: 0
//可以发现这个sql执行了7秒中,但是这条sql不会记录到慢查询日志中去,
因为slow_log 记录时间是按照  Query_time - Lock_time 的时间计算的 所以说等待时间和缩短时间 是不考虑的

5、通用日志 general_log

        使用场景:可以看一些原理,比如备份,使用mysqldump 或者其他命令执行备份之后,他是怎么一步步操作的,可以打开记录日志功能,能看到详细的信息

        0:关闭

        1:打开

[mysqld]
general_log = 1
general_log_file = general.log

        1、可以记录数据库相关操作

                参数:general_log

                默认文件名:机器名.log

        2、同样可以将日志保存到表中,mysql.general.log

        3、开启之后性能下降明显

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512137.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金三银四,程序员如何备战面试季

金三银四,程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 🏘️🏘️个人主页:以山河作礼。 🎖️…

2张图2秒钟3D重建!这款AI工具火爆GitHub,网友:忘掉Sora

只需2张图片,无需测量任何额外数据—— 当当,一个完整的3D小熊就有了: 这个名为DUSt3R的新工具,火得一塌糊涂,才上线没多久就登上GitHub热榜第二。 ▲image 有网友实测,拍两张照片,真的就重建…

uniapp微信小程序获取当前位置

uni-app微信小程序uni.getLocation获取位置;authorize scope.userLocation需要在app.json中声明permission;小程序用户拒绝授权后重新授权-CSDN博客

详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法

集合的概念 当我们需要保存一组一样(类型相同)的元素的时候,我们应该使用一个容器来存储,数组就是这样一个容器。 ● 数组的特点: 数组是一组数据类型相同的元素集合; 创建数组时,必须给定…

Stable Diffusion 模型分享:3D Animation Diffusion(3D动漫)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 3D Animation Diffusion 是 Lykon 大神的 3D 动漫模型。 作者述:在迪士尼、皮…

SPI相关知识总结

一、SPI 1.1SPI概念及通讯方式 SPI:串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步的通信总线 2.1 SPI框图 1.3.数据发送与接收流程 1.4 SPI工作模式 1)时钟极…

【OpenGL编程手册08】 摄像机

一、说明 前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感…

LeetCode 2673. 使二叉树所有路径值相等的最小代价【贪心】1917

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

附录:jdk安装及环境变量的配置

jdk的安装 JDK (Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。 下载jdk 在 oracle 官网中下载 jdk https://www.oracle.com/ 点击 JDK 下载自己需要的 JDK 版本&…

《UE5_C++多人TPS完整教程》学习笔记27 ——《P28 项目资产(Assets for The Project)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P28 项目资产(Assets for The Project)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译…

BUUCTF---[ACTF2020 新生赛]BackupFile1

1.题目描述 2.题目提示backup file ,是备份文件的意思。点开链接,页面提示 3.查看源码没有什么有用信息,也没有登录界面,所以也不会用到蚁剑链接来找备份文件,所以大概率就是通过构造playload来查找备份文件。 4.备份…