02_MySQL体系结构及数据文件介绍
#课程目标
- 了解MySQL的体系结构
- ==了解MySQL常见的日志文件及作用==
- 了解事务的控制语句,提交和回滚
- 能够查看当前数据库的版本和用户
- 了解MySQL数据库如何存放数据
- 能在使用SQL语句==创建、删除数据库==
#一、MySQL的体系结构

##1、客户端(连接者)
-
MySQL的客户端可以是==某个客户端软件==
-
MySQL的客户端可以是不同的编程语言(PHP/Python等)编写的==应用程序==
-
MySQL的客户端还可以是一些==API的接口==
##2、连接池(连接器)
主要作用:管理和缓冲用户连接,为客户端请求做连接处理;身份认证等。

3、SQL处理层
主要作用:接受用户的SQL请求,查询分析,权限处理,优化,结果缓存等。

##4、存储引擎层
-
什么是存储引擎?
1)存储引擎说白了就是==如何管理操作数据==(存储数据、如何更新、查询数据等)的==一种方法和机制==。
2)在MySql数据库中提供了==多种存储引擎,==各个存储引擎的优势各不一样。
3)用户可以根据不同需求为==数据表==选择不同的存储引擎,也可以根据自己需要编写自己的存储引擎。
4)甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。
-
常用的存储引擎有哪些?
最常用的存储引擎是==InnoDB==和MyISAM
| 存储引擎 | 描述 |
|---|---|
| ==InnoDB== | ==支持==拥有ACID特性==事务==的存储引擎,并且提供行级的锁定,应用相当广泛。 比如OLTP(在线事务处理系统) |
| MyISAM | 查询速度快,有较好的索引优化和数据压缩技术;但不支持事务。 适用于读多写少的应用场景,比如OLAP(在线分析处理系统) |
| NDB | 用于MySQL Cluster的集群存储引擎,提供数据层面的高可用性 |
| MEMORY | 存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。 适合于需要快速的访问或临时表。 |
| BLACKHOLE | 黑洞存储引擎,写入的任何数据都会消失,应用于主备复制中的分发主库(中继slave) |
##5、存储层
核心作用:
用来存储MySQL的==数据文件、日志文件==等==物理==文件。支持各种文件系统,如ext2~ext4,xfs,nas等。
6、MySQL体系结构总结
-
MySQL体系结构分为哪几层?
-
每一层是如何工作的?
-
MySQL5.5版本以后默认的存储引擎是哪个?有什么特点?
二、MySQL数据库物理文件
##1、常见的日志文件

###㈠ ==错误日志==
作用:存放数据库的启动、停止或运行时的错误信息;
场景:==用于数据库启动排错==。
如何开启?
默认是==开启==的,可以通过修改my.cnf文件自定义,如:
# vim /etc/my.cnf [mysqld] log_error=/path 注意:默认存在在$datadir/hostname.err
㈡ ==二进制日志==
作用:
二进制日志记录==数据库的所有更改==操作(DDL/DML/DCL),不包含select或者show这类语句。
场景:
-
用于==主从复制==中,master主服务器将二进制日志中的更改操作发送给slave从服务器,从服务器执行这些更改操作是的和主服务器的更改相同。
-
用于==数据的恢复==操作
如何开启?
默认binlog日志是==关闭==的,可以通过修改配置文件完成开启,如下:
# vim /etc/my.cnf [mysqld] #指定二进制日志存放位置及文件名 log-bin=/path/binlog
如何查看?
二进制日志比较特殊,需要使用==mysqlbinlog==工具查看,如mysqlbinlog 二进制日志文件
㈢ 一般查询日志
作用:当客户端连接或断开时,服务器会将信息写入该日志,并记录从客户端收到的每一条SQL语句。
场景:当==怀疑客户端的错误==并想知道==客户端发送给mysqld的确切信息==时,该日志非常有用。
如何开启?
默认情况下慢查询日志是==关闭==的,可以通过修改配置文件完成开启,如下:
# vim /etc/my.cnf [mysqld] #打开或关闭一般通用日志,0表示关闭;1表示开启 general_log=1 #指定一般查询日志的路径及文件名,默认$datadir/hostname-slow.log general_log_file=/path/file.log #定义日志的输出目标 log-output=FILE
说明: log-output参数用于定义一般通用日志和慢查询日志的==输出目标==,即log-output=[value,...]
value=[TABLE|FILE|NONE],默认值为==FILE==
| value | 描述 |
|---|---|
| TABLE | 表示将日志记录到表中,general_log表或者slow_log表中 |
| FILE | 表示将日志记录的文本文件中 |
| NONE | 表示不记录到表或者文件 |
千万注意:
-
如果log-output=NONE,则即使启用了日志,也不会写入条目。
-
如果log-output不等于NONE,但是没有启用日志也不会写入条目。
###㈣ 慢查询日志
作用:慢查询日志记录的是一些==SQL语句==,可用于查找需要很长时间才能执行的查询;
场景:用于找出长时间才能执行的查询语句,并对其进行优化。
但是,检查一个很长的慢查询日志可能成为一项艰巨的任务。为了简化这一过程,可以使用mysqldumpslow命令处理慢查询日志文件,以汇总日志中显示的查询。
如何开启?
默认情况下慢查询日志是==关闭==的,可以通过修改配置文件完成开启,如下:
# vim /etc/my.cnf
[mysqld]
#打开或关闭慢查询日志,0表示关闭;1表示开启
slow_query_log={1|0}
#指定慢查询日志的路径及文件名,默认$datadir/host_name-slow.log
slow_query_log_file=/path/file_name.log
#定义日志的输出目标
log-output=FILE
#表示查询语句超过n秒被记录到slow log里,最小值为0,默认值为10
long_query_time=n
###㈤ 中继日志
作用:记录从(slave)服务器接收来自主(master)服务器的二进制日志.
场景:用于==主从复制==
master主服务器将自己的二进制日志发送给slave从服务器,slave先保存在自己的==中继日志中==,然后再执行自己本地的relay log里的sql达到数据库更改和master保持一致。
如何开启?
默认中继日志==没有开启==,可以通过修改配置文件完成开启,如下:
# vim /etc/my.cnf [mysqld] #指定二进制日志存放位置及文件名 relay-log=/path/xxxx.log
㈥ 常用日志文件小结
| 日志文件 | 作用 | 场景 |
|---|---|---|
| 错误日志 | ||
| 二进制日志 | ||
| 一般查询日志 | ||
| 慢查询日志 | ||
| 中继日志 |
2、常见的数据文件
| 数据文件类型 | 描述 |
|---|---|
| *.frm 文件 | 1、任何存储引擎,每一个表都会有一个以表名命名的.frm文件。 2、与表相关的==元数据(meta)信息==都存放在此文件中,包括==表结构的定义==信息等 |
| *.MYD文件 | 1、myisam存储引擎专用,存放myisam表的数据(data) 2、每一个myisam表都会有一个.MYD文件与之呼应,同样存放在所属数据库的目录下 |
| *.MYI文件 | 1、myisam存储引擎专用,存放myisam表的索引相关信息 2、对于myisam存储引擎来说,可以被缓存(cache)的内容主要就是来源于.MYI文件中。 每一个myisam表对应一个.MYI文件 |
| *.ibd文件和ibdata文件 | 1、存放innoDB的数据文件(包括索引) 2、innoDB存储引擎有两种表空间方式:独享表空间和共享表空间。 3、独享表空间:使用.ibd文件来存放数据,且每个表一个.ibd文件。 4、共享表空间:使用.ibdata文件,所有表共同使用一个(或多个,自行配置).ibdata文件。 |
| db.opt文件 | 此文件在每一个==自建的库==里都会有,记录这个库的默认使用的==字符集和校验规== |
#三、MySQL中的SQL语句
##1、什么是SQL?
SQL 是 Structure Query Language(==结构化查询语言==)的缩写,它是使用==关系模型的数据库应== ==用语言==,由 IBM 在 20 世纪 70 年代开发出来,作为 IBM 关系数据库原型 System R 的原型关 系语言,实现了关系数据库中的信息检索。
20 世纪 80 年代初,美国国家标准局(ANSI)开始着手制定 SQL 标准,最早的 ANSI 标准于 1986 年完成,就被叫作 SQL-86。标准的出台使 SQL 作为标准关系数据库语言的地位得到了 加强。SQL 标准目前已几经修改更趋完善。
正是由于 SQL 语言的标准化,所以大多数关系型数据库系统都支持 SQL 语言,它已经发展 成为多种平台进行交互操作的底层会话语言。
##2、SQL语句的分类
-
DDL(Data Definition Languages)语句:
==数据定义语言==,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter、rename、truncate。
-
DML(Data Manipulation Language)语句:
==数据操纵语句==,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、update等。
-
DCL(Data Control Language)语句:
==数据控制语句==,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。
-
DQL(Data Query Language)语句:
==数据查询语句==,用于从一个或多个表中检索信息。主要的语句关键字包括 select
##3、MySQL中如何求帮助
-
亘古不变的官档
MySQL5.6官方文档
MySQL5.7官方文档
-
man文档
man文档可以对mysql的一些基本工具及后台命令求帮助,比如:
[root@db01 ~]# man mysql [root@db01 ~]# man mysql_install_db [root@db01 ~]# man mysqldump [root@db01 ~]# man mysqld
-
MySQL的命令行求帮助
mysql> help; mysql> ? mysql> help create table; 根据内容进行查找帮助 mysql> ? contentsAccount ManagementAdministrationData DefinitionData ManipulationData TypesFunctionsFunctions and Modifiers for Use with GROUP BYGeographic FeaturesLanguage StructureStorage EnginesStored RoutinesTable MaintenanceTransactionsTriggers寻求账户管理的帮助(一级一级的向内部查) mysql> ? Account Management mysql> ? CREATE USER
四、MySQL数据库基本操作
##1、常用的一些命令
###㈠ ==事务控制语句==
问:默认情况下MySQL如何提交事务的? 答:自动提交事务
问:MySQL如何自动提交呢?
答:
autocommit变量控制
-
查看
autocommit变量值
mysql> show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.00 sec) 说明:autocommit=ON表示自动提交
-
临时关闭自动提交
mysql> set autocommit=OFF; Query OK, 0 rows affected (0.00 sec)
-
永久关闭自动提交
修改my.cnf配置文件 vim my.cnf ... autocommit=0 或者 autocommit=OFF补充: DDL(数据定义语言):当执行时,会自动提交上面未提交的事务。create/drop/alter
-
手动控制事务
commit 提交 rollback 回滚
###㈡ 常见函数
查看mysql支持字符加密函数:
select password('123');
select md5('123');
select sha1('123');
select encrypt('123'); 基本上不用了使用select来调度mysql中的常见函数:
select version(); 当前数据库版本
select current_user(); 当前用户
select current_time(); 当前时间
select current_date(); 当前日期
select now(); 当前日期时间查看数据库的基本信息
mysql> \s 或者status
--------------
mysql Ver 14.14 Distrib 5.6.35, for linux-glibc2.5 (x86_64) using EditLine wrapperConnection id: 4
Current database:
Current user: root@localhost
....
###㈢ 其他常用语句
mysql> use 数据库名; 指定数据库,类似于进入到某个库里进行操作 mysql> show databases; 查看所有数据库 mysql> show schemas; 查看所有数据库 mysql> show tables; 查看所有表 mysql> show variables; 查看变量 mysql> show variables like '%char%'; mysql> show variables like '%data%'; mysql> show engines; 查看存储引擎 更改默认字符集为utf8mb4: 临时更改: mysql> set character_set_database=utf8mb4; Query OK, 0 rows affected (0.01 sec) mysql> set character_set_server=utf8mb4; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%char%'; mysql> show variables like 'collation_server'; +------------------+--------------------+ | Variable_name | Value | +------------------+--------------------+ | collation_server | utf8mb4_general_ci | +------------------+--------------------+ 永久更改: vim my.cnf [mysqld] ... character_set_server=utf8mb4 collation_server=utf8mb4_general_ci (可省略)
2、MySQL数据库如何存放数据

㈠ MySQL数据库库相关名词
| 名词 | 英文 |
|---|---|
| 数据库 | database |
| 数据表 | table |
| 字段 | field |
| 记录 | record |
说明:
1)一个MySQL数据库实例,可以同时创建多个database数据库;
2)一个database数据库可以同时拥有多个table数据表;
3)每个表都有自己的表头信息,如ID、Name、Gender、Addtime,称为field字段
4)每个表可以拥有多个记录,如Tom、King、Kylie、Jennie等个人信息
通过以上信息,我们可以得出,数据记录是如何保存和存储在数据库里的,即:
1)==数据(记录record) —> 数据表(table) —> 数据库(database)==
2)所以,要存放一条记录,那么必须得先有==数据库—>数据表—>数据记录==
㈡ 数据库基本操作
① 创建库(==create database==)
创建db1库 create database db1; 创建db1库并指定默认字符集 create database db1 default charset gbk; 如果存在不报错(if not exists) create database if not exists db1 default character set utf8; 说明:不能创建相同名字的数据库!
② 查看创建库的语句(show)
show create database db1;
③ 更改数据库信息(==alter database==)
更改db1库的默认字符集 alter database db1 default character set gbk; alter database db2 default charset utf8;
④ 删除数据库(==drop database==)
drop database db1;删除db1库
相关文章:
02_MySQL体系结构及数据文件介绍
#课程目标 了解MySQL的体系结构了解MySQL常见的日志文件及作用了解事务的控制语句,提交和回滚能够查看当前数据库的版本和用户了解MySQL数据库如何存放数据能在使用SQL语句创建、删除数据库 #一、MySQL的体系结构 ##1、客户端(连接者) MySQL的客户端可以是某个客户…...
【Web安全】xsstrike工具使用方法表格
xsstrike工具使用方法表格 版本:XSStrike v3.1.5 项目地址: https://github.com/s0md3v/XSStrike使用文档: usage: xsstrike.py [-h] [-u TARGET] [--data PARAMDATA] [-e ENCODE] [--fuzzer] [--update] [--timeout TIMEOUT] [--proxy][…...
python实现鼠标实时坐标监测
python实现鼠标实时坐标监测 一、说明 使用了以下技术和库: tkinter:用于创建GUI界面。pyperclip:用于复制文本到剪贴板。pynput.mouse:用于监听鼠标事件,包括移动和点击。threading:用于创建多线程&…...
【华为OD】C卷真题 100%通过:攀登者1 C/C++源码实现
【华为OD】C卷真题 100%通过:攀登者1 C/C源码实现 目录 题目描述: 示例1 代码实现: 题目描述: 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置&…...
Flask,uWSGI,nginx的理解
文章目录 前言与背景理解 - FlaskuWSGInginx理解 - nginx理解 - FlaskuWSGI理解 - vuedjangonginx 前言与背景 此篇文章是针对小白的一篇理解Flask,uWSGI,nginx的文章,只介绍了理解,并没有介绍如何部署。 由于工作需要使用flask…...
【JAVA杂货铺】一文带你走进面向对象编程|继承|重载|重写|期末复习系列 | (中4)
🌈个人主页: Aileen_0v0🔥系列专栏:Java学习系列专栏💫个人格言:"没有罗马,那就自己创造罗马~" 目录 继承 私有成员变量在继承中的使用编辑 当子类和父类变量不重名时: 当子类和父类重名时: 📝总结: 继承的含义: …...
单细胞seurat入门—— 从原始数据到表达矩阵
根据所使用的建库方法,单细胞的RNA序列(也称为读取(reads)或标签(tags))将从转录本的3端(或5端)(10X Genomics,CEL-seq2,Drop-seq&…...
Docker部署Nacos
此篇文章使用的nacos为2.2.1版本 拉取Nacos镜像 docker pull nacos/nacos-server:v2.2.1先将容器启动起来 docker run -d \ --name nacos \ -p 8848:8848 \ -p 9848:9848 \ -p 9849:9849 \ --privilegedtrue \ -e JVM_XMS256m \ -e JVM_XMX256m \ -e MODEstandalone \ -e NA…...
1005. K 次取反后最大化的数组和
原题链接:1005. K 次取反后最大化的数组和 思路: 先把数组排序好,然后直接从下标0(最小的负数)开始反转,那么接下来有两种情况: 1.负数反转完了,k还有剩余。此时因为nums内全部都是正数,所以我…...
【云原生】什么是 Kubernetes ?
什么是 Kubernetes ? Kubernetes 是一个开源容器编排平台,管理着一系列的 主机 或者 服务器,它们被称作是 节点(Node)。 每一个节点运行了若干个相互独立的 Pod。 Pod 是 Kubernetes 中可以部署的 最小执行单元&#x…...
自建CA实战之 《0x01 Nginx 配置 https单向认证》
自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构(Certificate Authority,CA),本篇文章我们将介…...
《QT从基础到进阶·三十八》QWidget实现炫酷log日志打印界面
QWidget实现了log日志的打印功能,不仅可以在界面显示,还可以生成打印日志。先来看下效果,源码放在文章末尾: LogPlugin插件类管理log所有功能,它可以获取Log界面并能打印正常信息,警告信息和错误信息&…...
JVM的小知识总结
加载时jvm做了这三件事: 1)通过一个类的全限定名来获取该类的二进制字节流 什么是全限定类名? 就是类名全称,带包路径的用点隔开,例如: java.lang.String。 即全限定名 包名类型 非限定类名也叫短名,就…...
深入理解JVM虚拟机第二十六篇:详解JVM当中的虚方法和非虚方法,并从字节码指令的角度去分析虚方法和非虚方法
😉😉 学习交流群: ✅✅1:这是孙哥suns和树哥给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚📚 微信:DashuDeveloper拉你进微信群,免费领取! 一:非虚方法和虚方法 方法…...
ElasticSearch的日志配置
ElasticSearch默认情况下使用Log4j2来记录日志,日志配置文件的路径为$ES_HOME/config/log4j2.properties,配置方法见Log4j2的官方文档。 参考path-settings,通过指定path.logs,可以指定日志文件的保存路径。 在日志配置文件$ES_…...
SQL Injection (Blind)`
SQL Injection (Blind) SQL Injection (Blind) SQL盲注,是一种特殊类型的SQL注入攻击,它的特点是无法直接从页面上看到注入语句的执行结果。在这种情况下,需要利用一些方法进行判断或者尝试,这个过程称之为盲注。 盲注的主要形式有…...
NX二次开发UF_CURVE_ask_trim 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_trim Defined in: uf_curve.h int UF_CURVE_ask_trim(tag_t trim_feature, UF_CURVE_trim_p_t trim_info ) overview 概述 Retrieve the current parameters of an a…...
linux的netstat命令和ss命令
1. 网络状态 State状态LISTENING监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求ESTABLISHED已连接,代表一个打开的连接,双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…...
python:傅里叶分析,傅里叶变换 FFT
使用python进行傅里叶分析,傅里叶变换 FFT 的一些关键概念的引入: 1.1.离散傅里叶变换(DFT) 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法,傅里叶变换是傅里叶分析的核心&…...
云原生系列Go语言篇-编写测试Part 2
基准测试 确定代码是快或慢非常复杂。我们不用自己计算,应使用Go测试框架内置的基准测试。下面来看第15章的GitHub代码库sample_code/bench目录下的函数: func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …...
SQL子查询与临时表的性能对比_实战测试分析
标量子查询在WHERE中可能被重复执行,应优先用LEFT JOIN预聚合或派生表;临时表有开销,CTE默认不物化,需显式提示或改用临时表。子查询在 WHERE 中执行多次?先看执行计划MySQL 或 PostgreSQL 里,WHERE 子句中…...
Mybatisplus 找不到分页组件
Mybatisplus的pom升级3.5.9后找不到分页组件类PaginationInnerInterceptor,挣扎一番发现需要单独导入一个pom,代码如下<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-jsqlparser</artifactId><…...
LabVIEW声音采集避坑指南:从麦克风选型到.lvm文件存储,新手必看的5个实战细节
LabVIEW声音采集避坑指南:从麦克风选型到.lvm文件存储的5个实战细节 第一次用LabVIEW做声音采集时,我对着波形图上跳动的噪声信号发呆了整整两小时——采样率设对了,接线也没问题,但采集到的音频就像老式收音机调频不准时的杂音。…...
如何用PPTist在浏览器中打造专业演示文稿?在线PPT编辑器的终极指南
如何用PPTist在浏览器中打造专业演示文稿?在线PPT编辑器的终极指南 【免费下载链接】PPTist PowerPoint-ist(/pauəpɔintist/), An online presentation application that replicates most of the commonly used features of MS PowerPoint,…...
Windows用户必看:3分钟免费获取macOS同款鼠标指针的终极指南
Windows用户必看:3分钟免费获取macOS同款鼠标指针的终极指南 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/m…...
3分钟极速上手:网盘下载加速神器全功能使用指南
3分钟极速上手:网盘下载加速神器全功能使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
胶片背后的科学:揭秘溴化银如何捕捉光影(含现代数码摄影对比)
胶片背后的科学:揭秘溴化银如何捕捉光影(含现代数码摄影对比) 当光线穿过镜头,在胶片表面留下潜影的那一刻,一场精妙的化学反应便悄然启动。这种用银盐捕捉光影的技术,曾统治影像记录领域长达一个多世纪&am…...
网盘直链解析技术:如何绕过客户端限制实现高速下载
网盘直链解析技术:如何绕过客户端限制实现高速下载 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 你是否曾因网盘客户端下载限速而苦恼?是否在无法安装客户端的环境中…...
Autovisor:智慧树课程自动化学习终极指南
Autovisor:智慧树课程自动化学习终极指南 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor Autovisor是一款基于Python Playwright框架开发的智能自动…...
Windows 11下Intel Realsense D435i深度相机Python开发环境搭建与实战
1. 深度相机入门:认识你的Intel Realsense D435i 第一次接触深度相机时,我和很多人一样被它酷炫的3D感知能力吸引。Intel Realsense D435i作为消费级深度相机的代表,它的实际表现远超我的预期。这款设备看起来像个普通摄像头,但内…...
