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。

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

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

相关文章

verilog编程之乘法器的实现

知识储备 首先来回顾一下乘法是如何在计算机中实现的。 假设现在有两个32位带符号定点整数x和y,我们现在要让x和y相乘,然后把乘积存放在z中,大家知道,两个32位数相乘,结果不会超过64位,因此z的长度应该为64…

大数据开发之离线数仓项目(3数仓数据同步策略)(可面试使用)

第 1 章:实时数仓同步数据 实时数仓由flink源源不断从kafka当中读数据计算,所以不需要手动同步数据到实时数仓。 第 2 章:离线数仓同步数据 2.1 用户行为数据同步 2.1.1 数据通道 用户行为数据由flume从kafka直接同步到hdfs,…

通俗易懂理解通道注意力机制(CAM)与空间注意力机制(SAM)

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。 一、参考资料 通道注意力,空间注意力,像素注意力 通道注意力机制和空间注意力机制 视觉 注意力机制——通道注意力、空间注意力、自注意力…

Linux:进程信号的概念与产生原理

文章目录 信号的概念实践信号关于前台和后台进程的操作 操作系统与外设信号的产生signal系统调用 前面的篇章结束了信号量的话题,那么接下来引入的是信号的话题,信号和信号量之间没有任何关系,只是名字比较像 信号的概念 在生活中存在各种各…

Java学习day24:线程的同步和锁(例题+知识点详解)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) 往期回顾 Java学习day23:线程构…

Matlab图像模拟加噪——高斯噪声、椒盐噪声、泊松噪声、乘性噪声、均匀噪声、指数噪声

1.高斯噪声 (1)通过均值和方差来产生 Jimnoise(I, gaussian, 0, 0.01);%高斯噪声,均值为0,方差为0.01(2)通过位置信息来产生 Iim2double(I); Vzeros(size(I)); %建立矩阵V for i1:size(V, 1)V(i,:)0.02*i/size(V,1); end Jimnoise(I, localvar, V); …

Linux安装aria2出现No package aria2 available.的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

牛客,OR36 链表的回文结构,快慢指针和反转链表的实践

链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 还是比较简单的,主要分为三个步骤,两种需掌握的函数实现 目录 主要思路过程,1,找到中间结点,2,反转中间结点往后的结点,3,遍历比…

双非本科准备秋招(13.1)—— 力扣 栈、队列与堆

1、103. 二叉树的锯齿形层序遍历 昨天做的二叉树的层序遍历,把代码直接拿过来。 这个题要求的是一个Z型遍历,如下图。 用一个变量f记录正反顺序,然后使用LinkedList记录答案,下图可以看到LinkedList继承了Deque,所以…

Python算法题集_除自身以外数组的乘积

Python算法题集_除自身以外数组的乘积 题239:除自身以外数组的乘积1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【暴力求解】2) 改进版一【字典改进乘积计算】3) 改进版二【字典改进乘积计算预计算数字乘积】4) 改进版三【前缀乘积…

第二集《修道宗范》

请大家打开讲义第5页,我们讲到丙一、先修出离心。 身为一个有情众生,我们内心当中,有一个没办法改变的本性,我们就是希望生命能够离苦得乐,这是没办法改变的。换句话说,我们每一个人都喜欢安乐&#xff0c…

Java技术栈 —— Hadoop入门(二)实战

Java技术栈 —— Hadoop入门(二) 一、用MapReduce对统计单词个数1.1 项目流程1.2 可能遇到的问题1.3 代码勘误1.4 总结 一、用MapReduce对统计单词个数 1.1 项目流程 (1) 上传jar包。 (2) 上传words.txt文件。 (3) 用hadoop执行jar包的代码,…

【C++】 C++入门 — auto关键字

C入门 auto 关键字1 介绍2 使用细则3 注意事项 Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! auto 关键字 1 介绍 编程时常常需要把表达式的值赋给变量,这就要求在声明变量时清楚地知道表达式的类…

指针的深入理解(四)

这节主要讨论sizeof和strlen的区别,以及一些理解题。 sizeof 求的是对象的大小,深入理解一点就是:这个对象,他一定有一块对应的内存空间。求的就是这一块内存空间。 strlen 只能用来求字符串, 求取的是字符串的长度。…

面试了字节大模型算法岗(实习),快被问哭了。。。。

最近技术群组织了一次算法面试讨论会,今天分享的是一位小伙子的痛苦面试经历,如果你想加入我们的讨论群,见文末。 本次分享的内容如下: 应聘岗位:字节大模型算法实习生 面试轮数:第一轮 整体面试感觉&…

python封装的.exe文件是如何在cmd中获取.xml路径的?

这段日子搞项目算法封装,愁死我。来回改了三遍,总算把相对路径、绝对路径,还有cmd给.exe传参的方式搞懂了。 主要是这个语句 workspace sys.argv[1] sys.argv[]的作用就是,在运行python文件的时候从外部输入参数往文件里面传递参数。 外部就…

CTF盲水印工具:Blind-WaterMark安装

工具下载地址:GitCode - 开发者的代码家园 下载完毕后,只留这些东西就行 接下来需要安装两个依赖: opencv、matplotlib 直接pip install安装的话,工具使用会报错 所以需要到网站里挑选适合的版本进行安装 下载地址&#xff1…

项目:博客

1. 运行环境: 主机 主机名 系统 服务 192.168.223.129 Server_Web Linux Web 192.168.48.131 Server-NFS-DNS Linux NFS/DNS 2. 基础配置 配置主机名,静态IP地址 开启防火墙并配置 部分开启SElinux并配置 服务器之间使用同ntp.aliyun.com进行…

详讲api网关之kong的基本概念及安装和使用(二)

consul的服务注册与发现 如果不知道consul的使用,可以点击上方链接,这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道,配置upstream可以实现负载均衡,而consul实现了服务注册与发现,那么接下来…

leetcode209长度最小的子数组|滑动窗口算法详细讲解学习

滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。 分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。 简而言之,滑动窗口算法在一个特定大小的字符串或数组上进行操作&…