MySQL原理(一)架构组成之物理文件组成
目录
一、日志文件
1、错误日志 Error Log
1.1、作用:
1.2、开启关闭:
1.3、使用
2、二进制日志 Binary Log & Binary Log Index
2.1、作用:
2.2、开启关闭:
2.3、Binlog还有一些附加选项参数
(1)--max_binlog_size
(2)--binlog-do-db=db_name
(3)--binlog-ignore-db=db_name
3、更新日志update log
4、查询日志query log
5、慢查询日志slow query log
6、Innodb的在线redo日志innodb redo log
二、数据文件
1、.frm文件
2、.MYD文件
3、.MYI文件
4、.ibd文件和 ibdata文件
4.1、独享表空间存储方式:
4.2、共享表空间来存放数据
三、Replication相关文件
1、master.info文件
2、relay log和relay log index
3、relay-log.info文件
四、其他文件
1、system config file
2、pid file
3、socket file
本篇基于MyISAM、Innodb两种最常见的引擎。
以windows mysql5.7为例,我的安装目录为 C:\ProgramData\MySQL\MySQL Server 5.7
一、日志文件
1、错误日志 Error Log
1.1、作用:
错误日志记录了MySQL运行过程中所有较为严重的警告和错误信息,以及MySQL Server每次启动和关闭的详细信息。
1.2、开启关闭:
在默认情况下,系统记录错误日志的功能是关闭的,如果要开启系统记录错误日志的功能,需要在启动时开启-log-error[=file_name],修改其存放目录和文件名。my.ini中默认配置如下:

1.3、使用
为了方便维护,有时候会希望将错误日志中的内容做备份并重新开始记录,这时候就可以利用MySQL的flush log命令来告诉MySQL备份旧日志文件并生成新的日志文件。备份文件名以“.old”结尾。
2、二进制日志 Binary Log & Binary Log Index
2.1、作用:
二进制日志,也就是我们常说的binlog,也是MySQL中最为重要的日志之一。我们在做主从复制的时候需要用到这个文件。当我们通过“—log-bin=[=file_name]”打开了记录的功能之后,MySQL会将所有修改数据库数据的query以二进制形式记录到日志文件中。当然,日志并不仅限于sql语句这么简单,还包括每一条sql所执行的时间,所消耗的资源,以及相关的事务信息,所以binlog是事务安全的。
mysql-bin.index文件(binary log index)的功能是记录所有Binary Log的绝对路径,保证MySQL各种线程能够顺利的根据它找到所有需要的Binary Log文件。
2.2、开启关闭:
和错误日志一样,binlog记录功能需要“—log-bin[=file_name]”参数显示指定才能开启,如果未指定file_name,则会在数据目录下记录为mysql-bin.******(*代表0-9之间的某一个数字,来标识该日志的序号)。my.ini中默认配置如下:

2.3、Binlog还有一些附加选项参数
(1)--max_binlog_size
设置binlog的最大存储上线,当日志达到上限时,MySQL会重新创建一个日志开始继续记录。不过偶尔也会有超出该设置的binlog产生,一般都是因为在即将到达上限时,产生了一个较大的事务,为了保证事务安全,MySQL不会将同一个事务分开记录到两个binlog中。
(2)--binlog-do-db=db_name
参数明确告诉MySQL,需要对某个(db_name)数据库记录binlog,如果有了“—binlog-do-db=db_name”参数的显示制定,MySQL会忽略针对其他数据库执行的sql语句,而仅仅记录对制定数据库执行的sql。
(3)--binlog-ignore-db=db_name
与 “--binlog-do-db=db_name”完全相反,它显示指定忽略某个(db_name)数据库的binlog记录,当制定了这个参数之后,MySQL会记录制定数据库以外所有的数据库的binlog。
注意: --binlog-ignore-db=db_name”与“--binlog-do-db_db_name”两个参数有一个共同的概念,参数中的db_name不是指sql语句更新的数据所在的数据库,而是指执行sql的时候当前所处的数据库。不论更新哪个数据库的数据,MySQL仅仅比较当前连接所处的数据库(通过use_db_name切换后所在的数据库)与参数设置的数据库名,而不会分析sql语句所更新数据库所在的数据库。
3、更新日志update log
5.0版本之后不再支持更新日志,由binlog功能代替。
4、查询日志query log
查询日志记录MySQL中所有的query,通过“--log[=file_name]”来打开该功能。由于记录了所有的query,包括所有的select,体积比较大,开启后对性能也有较大的影响,所以该功能要慎用。一般用于跟踪某些特殊的sql性能问题才会短暂打开该功能。默认的查询日志文件名为hostname.log。
5、慢查询日志slow query log
慢查询日志中记录的是执行时间较长的query,也就是我们常说的slow query,通过设--log-slow-queries[=file_name]来打开该功能并设置记录位置和文件名,默认文件名为hostname-slow.log,默认目录也是数据目录。
慢查询日志采用的是简单的文本格式,可以通过各种文本编辑器查看其中内容。其中记录了语句执行的时间,执行所消耗的时间,执行用户,连接主机等相关信息。MySQL还提供了专门用来分析慢查询日志的工具程序mysqlslowdump,用来帮助数据库管理人员解决可能存在的性能问题。
6、Innodb的在线redo日志innodb redo log
Innodb是一个事务安全的存储引擎,其事务安全性主要就是通过在线redo日志和记录表空间中undo信息来保证的。redo日志中记录了Innodb所做的所有物理变更和事务信息,通过redo日志和undo信息,Innodb保证了在任何情况下的事务安全性。Innodb的redo日志同样默认存放在数据目录下,可以通过innodb_log_home_dir来更改设置日志的存放位置,通过innodb_log_files_in_group设置日志的数量。
二、数据文件
在MySQL中每一个数据库都会定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。不同的MySQL存储引擎有各自不同的数据文件,存放位置也有区别。多数存储引擎的数据文件都存放在和MyISAM数据文件位置相同的目录下,但是每个数据文件的扩展名却各不一样。如MyISAM用“.MYD”作为扩展名,Innodb用“.ibd”等等。
1、.frm文件
与表相关的元数据(meta)信息存放在“.frm”文件中,包含表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。
2、.MYD文件
".MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件放在一起。
3、.MYI文件
“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说,可以被cache的内容主要就是来源于“.MYI”文件中。每一个MyISAM表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。
4、.ibd文件和 ibdata文件
这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为Innodb的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。
4.1、独享表空间存储方式:
使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和MyISAM数据相同的位置。
4.2、共享表空间来存放数据
使用“ibdata”文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata文件。Ibdata文件可以通过innodb_data_home_dir和innodb_data_file_path两个参数共同配置组成,
(1)innodb_data_home_dir配置数据存放的总目录;
(2)innodb_data_file_path配置每一个文件的名称。当然,也可以不配置innodb_data_home_dir而直接在innodb_data_file_path参数配置的时候使用绝对路径来完成配置。Innodb_data_file_path中可以一次配置多个ibdata文件。文件可以使制定大小,也可以是自动扩展的,但那是Innodb限制了仅仅只有最后一个ibdata文件能够配置成自动扩充类型。当我们需要添加新的ibdata文件的时候,只能添加在innodb_data_file_path配置的最后,而且必须重启MySQL才能完成ibdata的添加工作。不过如果我们使用独享表空间存储方式的话,就不会有这样的问题。
三、Replication相关文件
1、master.info文件
master.info文件存在于Slave端的数据目录下,里面存放了该Slave的Master端的相关信息,包括Master的主机地址,连接用户,连接密码,连接端口,当前日志位置,已经读取到的日志位置等信息。
2、relay log和relay log index
mysql-relay-bin.******文件用于存放Slave端的I/O线程从Master端读取到的Binary Log信息,然后由Slave端的SQL线程从该relay log中读取并解析相应的日志信息,转化为Master端执行的SQL语句,然后在Slave端应用。
mysql-relay-bin.index文件的功能类似于mysql-bin.index,同样是记录日志的存放位置的绝对路径,只不过他记录的不是Binary Log,而是Relay Log。
3、relay-log.info文件
类似于master.info,它存放通过Slave的I/O线程写入到本地的relay log的相关信息。供Slave端的SQL线程以及某些管理操作随时能够获取当前复制的相关信息。
四、其他文件
1、system config file
MySQL的系统配置文件一般都是“my.cnf”,“my.cnf”文件中包含多种参数选项组,每一种参数组都通过中括号给定了固定的组名,如“[mysqld]”组中包括了mysqld服务启动时候的初始化参数,“[client]”组中包含着客户端工具程序可以读取的参数,此外还有其他针对各个客户端软件的特定参数组,如mysql程序使用“[mysql]”等等,如果读者编写了某个客户端程序,也可以自己设定给一个参数组名,将相关参数配置在里面,然后mysql客户端api程序中的参数读取api读取相关参数。
说明:mysql系统配置文件
① linux系统中,该文件的位置是“/etc/mysql/my.cnf”;
② windows系统中,该文件的位置是“C:\Program Files\MySQL\MySQL Server\my.ini”。
2、pid file
pid file是mysqld应用程序在Unix/Linux环境下的一个进程文件,和其他Unix/Linux服务端程序一样,也存放这自己的进程id.
3、socket file
Socket文件也是在Unix/Linux环境下才有的,用户在Unix/Linux环境下客户端连接可以不通过TCP/IP网络而直接使用Unix Socket来连接MySQL。
相关文章:
MySQL原理(一)架构组成之物理文件组成
目录 一、日志文件 1、错误日志 Error Log 1.1、作用: 1.2、开启关闭: 1.3、使用 2、二进制日志 Binary Log & Binary Log Index 2.1、作用: 2.2、开启关闭: 2.3、Binlog还有一些附加选项参数 (1&#x…...
代码随想录算法训练营第三十七天 | 738.单调递增的数字、 968.监控二叉树
题目链接:738.单调递增的数字 文章讲解:代码随想录 738.单调递增的数字讲解 视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字 思路和解法 题目: 当且仅当每个相邻位…...
【Django-ninja】django-ninja的hello world
django-ninja简介 Django Ninja是一个用于使用Django和Python 3.6类型提示构建API的Web框架。 主要特点: 易用性:旨在易于使用和直观。 高性能执行:由于Pydantic和异步支持,具有非常高的性能。 编码效率高:类型提…...
ArrayList集合初始化长度是多少,初始化的时候分配内存空间吗
ArrayList一旦初始化,在内存中就会分配空间吗 是的,当ArrayList在Java中初始化时,即使它没有添加任何元素,也会立即分配内存空间。具体来说,对于默认构造函数创建的ArrayList(即不指定初始容量)…...
C语言数组:从入门到进阶
前言: 在这篇博客中,我们将学习如何使用C语言数组的基本知识。数组是C语言中的一种重要数据结构,它允许我们存储一系列相同类型的数据。我们将讨论数组的定义、初始化、访问元素、遍历数组以及数组的应用场景。此外,我们还将通过…...
9.回文数
回文数 将整型转换为字符型反转前一半是否等于后一半将数字本身反转输入一个整数 x,如果 x是一个回文整数,返回 true;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 将整型转换为字符型 反转…...
一分钟在SpringBoot项目中使用EMQ
先展示最终的结果: 生产者端: RestController RequiredArgsConstructor public class TestController {private final MqttProducer mqttProducer;GetMapping("/test")public String test() {User build User.builder().age(100).sex(1).address("世界潍坊渤…...
SOME/IP 协议介绍(七)传输 CAN 和 FlexRay 帧
SOME/IP 不应仅用于传输 CAN 或 FlexRay 帧。但是,消息 ID 空间需要在两种用例之间进行协调。 传输 CAN/FlexRay 应使用完整的 SOME/IP 标头。 AUTOSAR Socket-Adapter 使用消息 ID 和长度来构建所需的内部 PDU,但不会查看其他字段。因此,必…...
与数组相关经典面试题
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...
数据结构与算法面试系列-02
1. 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 程序代码如下: package com.yoodb.uti…...
CMake 完整入门教程(五)
CMake 使用实例 13.1 例子一 一个经典的 C 程序,如何用 cmake 来进行构建程序呢? //main.c #include <stdio.h> int main() { printf("Hello World!/n"); return 0; } 编写一个 CMakeList.txt 文件 ( 可看做 cmake 的…...
pgsql中with子句和直接查询差别
1、代码的可读性和维护性: 当查询较为复杂时,WITH子句可以将复杂的查询分解成多个简单的步骤,每个步骤都可以有一个易于理解的名字。这样做提高了代码的可读性,也便于后期维护。 2、代码的重用性: 在WITH子句中定义…...
Day 31 | 贪心算法 理论基础 、455.分发饼干 、 376. 摆动序列 、 53. 最大子序和
理论基础 文章讲解 455.分发饼干 题目 文章讲解 视频讲解 思路:从小饼干开始喂小胃口 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int start 0;int count 0;for (int i 0; i < s.length &&a…...
vue3使用is动态切换组件报错Vue received a Component which was made a reactive object.
vue3使用is动态切换组件,activeComponent用ref定义报错 Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef ins…...
React16源码: React中LegacyContext的源码实现
LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了,就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢?因为它…...
Gin 框架之jwt 介绍与基本使用
文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …...
从[redis:LinkedList]中学习链表
文章目录 adlistlistNodelistmacros[宏定义]listCreatelistInitNodelistEmptylistReleaselistAddNodeHeadlistLinkNodeHeadlistAddNodeTaillistLinkNodeTaillistInsertNodelistDelNodelistUlinkNodelistIndexredis3.2.100quicklistredis7.2.2quicklist redis的基本数据类型之一…...
Prometheus+grafana配置监控系统
使用docker compose安装 方便拓展, 配置信息都放在在 /docker/prometheus 目录下 1.目录结构如下 . ├── conf │ └── prometheus.yml ├── grafana_data ├── prometheus_data └── prometheus_grafana.yaml2.创建目录文件 mkdir /docker/prometheus &&am…...
Linux之安装配置CentOS 7
一、CentOS简介 CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,…...
神经网络与深度学习Pytorch版 Softmax回归 笔记
Softmax回归 目录 Softmax回归 1. 独热编码 2. Softmax回归的网络架构是一个单层的全连接神经网络。 3. Softmax回归模型概述及其在多分类问题中的应用 4. Softmax运算在多分类问题中的应用及其数学原理 5. 小批量样本分类的矢量计算表达式 6. 交叉熵损失函数 7. 模型预…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
