当前位置: 首页 > news >正文

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(即不指定初始容量&#xff09…...

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 程序&#xff0c;如何用 cmake 来进行构建程序呢&#xff1f; //main.c #include <stdio.h> int main() { printf("Hello World!/n"); return 0; } 编写一个 CMakeList.txt 文件 ( 可看做 cmake 的…...

pgsql中with子句和直接查询差别

1、代码的可读性和维护性&#xff1a; 当查询较为复杂时&#xff0c;WITH子句可以将复杂的查询分解成多个简单的步骤&#xff0c;每个步骤都可以有一个易于理解的名字。这样做提高了代码的可读性&#xff0c;也便于后期维护。 2、代码的重用性&#xff1a; 在WITH子句中定义…...

Day 31 | 贪心算法 理论基础 、455.分发饼干 、 376. 摆动序列 、 53. 最大子序和

理论基础 文章讲解 455.分发饼干 题目 文章讲解 视频讲解 思路&#xff1a;从小饼干开始喂小胃口 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动态切换组件&#xff0c;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 被彻底移除了&#xff0c;就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢&#xff1f;因为它…...

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&#xff08;Community Enterprise Operating System&#xff0c;中文意思是社区企业操作系统&#xff09;是Linux发行版之一&#xff0c;它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码&#xff0c…...

神经网络与深度学习Pytorch版 Softmax回归 笔记

Softmax回归 目录 Softmax回归 1. 独热编码 2. Softmax回归的网络架构是一个单层的全连接神经网络。 3. Softmax回归模型概述及其在多分类问题中的应用 4. Softmax运算在多分类问题中的应用及其数学原理 5. 小批量样本分类的矢量计算表达式 6. 交叉熵损失函数 7. 模型预…...

图像处理中的NCC算法:从原理到优化(附Python实现对比)

图像处理中的NCC算法&#xff1a;从原理到优化&#xff08;附Python实现对比&#xff09; 在计算机视觉领域&#xff0c;模板匹配是一项基础而重要的技术。想象一下这样的场景&#xff1a;你正在开发一个工业质检系统&#xff0c;需要在流水线上快速识别产品上的特定标识&#…...

连续使用 OpenClaw 50 天后,我总结了 3 个核心工作流和 5 个血泪教训

&#x1f525; 连续使用 OpenClaw 50 天后&#xff0c;我总结了 3 个核心工作流和 5 个血泪教训AI 不会取代你&#xff0c;但会用 AI 的人会取代你——这句话说烂了&#xff0c;但 50 天后我才真正明白它的意思。01 上周五下午 5 点&#xff0c;同事都在加班&#xff0c;我先走…...

手动侧开门款屏蔽箱 适用蓝牙 WIFI测试 无线测试屏蔽箱GX-5950A

GX-5950A屏蔽箱品名:屏蔽箱型号:GX-5950A一、主要功能及适用范围&#xff1a;1 该屏蔽箱适用于无线通讯测试、1 EMI测试、1 耦合测试、1 RF功能测试。适用于手机&#xff0c;平板计算机&#xff0c;蓝牙&#xff0c;wi-fi&#xff0c;天线等测试&#…...

DeOldify图像上色服务完整流程:基于Flask的Web服务部署与使用

DeOldify图像上色服务完整流程&#xff1a;基于Flask的Web服务部署与使用 1. 项目概述与核心功能 DeOldify图像上色服务是一个基于深度学习技术的Web应用&#xff0c;能够将黑白或褪色的老照片自动转换为彩色图像。这个项目通过简单的Web界面&#xff0c;让用户无需任何技术背…...

Python 性能优化避坑指南:回归风险防控、基准压测与安全回滚实战

Python 性能优化避坑指南&#xff1a;回归风险防控、基准压测与安全回滚实战 &#x1f4cc; 性能优化&#xff0c;为什么总让人又爱又怕&#xff1f; Python 从 1991 年 Guido van Rossum 创造至今&#xff0c;已成长为全球开发者首选“胶水语言”。其简洁优雅的语法、动态类…...

PP-DocLayoutV3入门必看:从零部署到JSON结构化输出完整流程

PP-DocLayoutV3入门必看&#xff1a;从零部署到JSON结构化输出完整流程 1. 开篇&#xff1a;认识文档布局分析利器 你是否曾经遇到过这样的困扰&#xff1a;面对扫描的文档图片&#xff0c;想要提取其中的文字和结构信息&#xff0c;却不知道从何下手&#xff1f;或者需要处理…...

UEFI启动画面定制指南:3步实现个性化Windows启动界面

UEFI启动画面定制指南&#xff1a;3步实现个性化Windows启动界面 【免费下载链接】HackBGRT Windows boot logo changer for UEFI systems 项目地址: https://gitcode.com/gh_mirrors/ha/HackBGRT HackBGRT是一款专为UEFI系统设计的Windows启动画面定制工具&#xff0c;…...

嵌入式多线程与多进程技术详解

嵌入式软件编程之多线程与多进程技术解析1. 操作系统任务调度基础1.1 时间片轮转调度机制现代操作系统&#xff08;如Windows、Linux&#xff09;普遍采用时间片轮转的抢占式调度方式。在这种机制下&#xff1a;每个任务执行固定长度的时间片后被强制暂停被暂停的任务进入就绪状…...

终极指南:ZoneMinder开源监控系统的架构设计与核心组件解析

终极指南&#xff1a;ZoneMinder开源监控系统的架构设计与核心组件解析 【免费下载链接】zoneminder ZoneMinder is a free, open source Closed-circuit television software application developed for Linux which supports IP, USB and Analog cameras. 项目地址: https…...

终极指南:如何参与Carbonyl开源终端浏览器项目贡献

终极指南&#xff1a;如何参与Carbonyl开源终端浏览器项目贡献 【免费下载链接】carbonyl Chromium running inside your terminal 项目地址: https://gitcode.com/gh_mirrors/ca/carbonyl Carbonyl是一个创新的开源项目&#xff0c;它让Chromium浏览器能够在终端中运行…...