2-3-1-2、MySQL中的目录和文件

news2024/9/23 19:14:42

目录

  • bin 目录
    • 服务器程序
      • mysqld
      • mysqld_safe
      • mysql.server
      • mysqld_multi
    • 客户端程序
      • mysqladmin
      • mysqldump
      • mysqlbackup
  • 启动选项和参数
    • 配置参数文件
    • 参数的查看和修改
  • 数据目录
    • MySQL 中的数据目录
    • 表在文件系统中的表示
      • lnnoDB 是如何存储表数据的
        • 系统表空间(system tablespace)
        • 独立表空间(file-per-table tablespace)
        • 其他类型的表空间
      • MyISAM 是如何存储表数据的
    • 日志文件
      • 错误日志
      • 慢查询日志
      • 查询日志
      • 二进制日志(binlog)
    • 其他的数据文件

bin 目录

在 MysQL 的安装目录下有一个特别特别重要的 bin 目录,这个目录下存放着许多可执行文件

在这里插入图片描述


其他系统中的可执行文件与此的类似。这些可执行文件都是与服务器程序和客户端程序相关的

服务器程序

在类 UNIX 系统中用来启动 MySOL 服务器程序的可执行文件有很多,大多在 MySQL 安装目录的 bin 目录下

mysqld

mysqld 这个可执行文件就代表着 MySOL 服务器程序,运行这个可执行文件就可以直接启动一个服务器进程。但这个命令不常用

mysqld_safe

mysqld safe 是一个启动脚本,它会间接的调用 mysqld,而且还顺便启动了另外一个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使用 mysqld_safe 启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个文件中,产生出错日志,这样可以方便我们找出发生错误的原因

mysql.server

mysql.server 也是一个启动脚本,它会间接的调用 mysqld_safe,在调用 mysql.server 时在后边指定 start 参数就可以启动服务器程序了
例如:

mysql.server start

需要注意的是,这个 mysql.server 文件其实是一个链接文件,它的实际文件是 support-files/mysql.server,所以如果在 bin 目录找不到,到 support-files 下去找找,而且可以自行用 ln 命令在 bin 创建一个链接
另外,我们还可以使用 mysql.server 命令来关闭正在运行的服务器程序,只要把 start 参数换成 stop 就好了
例如:

mysql.server stop

mysqld_multi

其实我们一台计算机上也可以运行多个服务器实例,也就是运行多个 MySQL 服务器进程。mysql_multi 可执行文件可以对每一个服务器进程的启动或停止进行监控

客户端程序

成功启动 MySQL 服务器程序后,就可以接着启动客户端程序来连接到这个服务器,bin 目录下有许多客户端程序,比方说 mysqladmin、mysqldump、mysqlcheck 等等
我们常用的是可执行文件 mysql,通过这个可执行文件可以让我们和服务器程序进程交互,也就是发送请求,接收服务器的处理结果

mysqladmin

执行管理操作的工具,检查服务器配置、当前运行状态,创建、删除数据库、设置新密码

mysqldump

数据库逻辑备份程序

mysqlbackup

数据库物理备份程序

启动选项和参数

配置参数文件

当 MySQL 实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等。在默认情况下,MySQL 实例会按照一定的顺序在指定的位置进行读取,用户只需通过下面命令寻找即可:

mysql --help|grep my.cnf

在这里插入图片描述


当然,也可以在启动 MySQL 时,指定配置文件:

在这里插入图片描述


再次查看:

在这里插入图片描述


这个时候,就会以启动时指定的配置文件为准
MySQL 数据库参数文件的作用和 Oracle 数据库的参数文件极其类似,不同的是,Oracle 实例在启动时若找不到参数文件,是不能进行装载(mount)操作的。MySQL 稍微有所不同,MySQL 实例可以不需要参数文件,这时所有的参数值取决于编译 MySQL 时指定的默认值和源代码中指定参数的默认值
MySQL 数据库的参数文件是以文本方式进行存储的。可以直接通过一些常用的文本编辑软件进行参数的修改

参数的查看和修改

可以通过命令 show variables 查看数据库中的所有参数,也可以通过 LIKE 来过滤参数名
从 MySQL 5.1 版本开始,还可以通过 information_schema 架构下的 GLOBAL_VARIABLES 视图来进行查找,推荐使用命令 show variables,使用更为简单,且各版本的 MySQL 数据库都支持
MySQL官方文档:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
MySQL 数据库中的参数可以分为两类:

  1. 动态(dynamic)参数和静态(static)参数
    1. 动态参数意味着可以在 MySQL 实例运行中进行更改
    2. 静态参数说明在整个实例生命周期内都不得进行更改,就好像是只读(read only)的
  2. 同时从作用范围又可以分为全局变量和会话变量
    1. 全局变量(GLOBAL)影响服务器的整体操作
    2. 会话变量(SESSION/LOCAL)影响某个客户端连接的操作

数据目录

像 InnoDB、MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统

MySQL 中的数据目录

数据目录对应着一个系统变量 datadir,我们在使用客户端与服务器建立连接之后查看这个系统变量的值就可以查看数据目录的地址,例如:

show variables like 'datadir';

在这里插入图片描述


当然这个目录可以通过配置文件进行修改,由我们自己进行指定

表在文件系统中的表示

数据其实都是以记录的形式插入到表中的,每个表的信息其实可以分为两种:

  • 表结构的定义
  • 表中的数据

表结构就是该表的名称是什么,表里边有多少列,每个列的数据类型是啥,有啥约束条件和索引,用的是啥字符集和比较规则各种信息,这些信息都体现在了建表语句中了。为了保存这些信息,InnoDB 和 MyIASM 这两种存储引擎都在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件,文件名是这样:表名.frm
例如:在 mysqladv 数据库下创建一个名为 test 的表:

在这里插入图片描述


数据目录下的文件:

在这里插入图片描述


那在数据库 mysqladv 对应的子目录下就会创建一个名为 test.frm 的用于描述表结构的文件。这个后缀名为.fm 是以二进制格式存储的
不同的存储引擎对数据的存储不太一样

lnnoDB 是如何存储表数据的

InnoDB 的数据会放在一个表空间或者文件空间(英文名: table space 或者 file space)的概念,这个表空间是一个抽象的概念,它可以对应文件系统上一个或多个真实文件〈不同表空间对应的文件数量可能不同)。每一个表空间可以被划分为很多很多很多个页,表数据就存放在某个表空间下的某些页里。表空间有好几种类型

系统表空间(system tablespace)

这个所谓的系统表空间可以对应文件系统上一个或多个实际的文件,默认情况下,InnoDB 会在数据目录下创建一个名为 ibdata1(在你的数据目录下找找看有没有)、大小为 12M 的文件,这个文件就是对应的系纳表空间在文件系统上的表示

在这里插入图片描述


这个文件是所谓的自扩展文件,也就是当不够用的时候它会自己增加文件大小,当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名难听,那可以在 MySQL 启动时配置对应的文件路径以及它们的大小,我们也可以把系统表空间对应的文件路径不配置到数据目录下,甚至可以配置到单独的磁盘分区上
需要注意的一点是,在一个 MySQL 服务器中,系统表空间只有一份。从 MySQL5.5.7 到 MySQL5.6.6 之间的各个版本中,我们表中的数据都会被默认存储到这个系统表空间

独立表空间(file-per-table tablespace)

在 MySQL5.6.6 以及之后的版本中,InnoB 并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd 的扩展名而已,所以完整的文件名称长这样:表名.ibd
例如:使用了独立表空间去存储 xiaohaizi 数据库下的 test 表的话,那么在该表所在数据库对应的目录下会为 test 表创建这两个文件:

  • test.frm
  • test.ibd

在这里插入图片描述


其中 test.ibd 文件就用来存储 test 表中的数据和索引。当然我们也可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数 innodb_file_per_table 控制,比如说我们想刻意将表数据都存储到系统表空间时,可以在启动 MySQL 服务器的时候这样配置:

[server]
innodb_file_per_table=0

当 imodb_file_per table 的值为 0 时,代表使用系统表空间;当 innodb_file per table 的值为 1 时,代表使用独立表空间。不过 inmodb_file_per_table 参数只对新建的表起作用,对于已经分配了表空间的表并不起作用

其他类型的表空间

随着 MySQL 的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用表空间(general tablespace) ,undo 表空间 (undotablespace)、临时表空间〈temporary tablespace)等

MyISAM 是如何存储表数据的

在 MyISAM 中的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件。而且和 InnoDB 不同的是,MyISA 并没有什么所谓的表空间一说,表数据都存放到对应的数据库子目录下

在这里插入图片描述


test_myisam 表使用 MyISAM 存储引擎的话,那么在它所在数据库对应的目录下会为 myisam 表创建三个文件:

在这里插入图片描述

  • test_myisam.MYD 代表表的数据文件,也就是我们插入的用户记录;
  • test_myisam.MYI 代表表的索引文件,我们为该表创建的索引都会放到这个文件中

日志文件

在服务器运行过程中,会产生各种各样的日志,比如常规的查询日志、错误日志、二进制日志、redo 日志、Undo 日志等等,日志文件记录了影响 MySQL 数据库的各种类型活动
常见的日志文件有:

  • 错误日志(error log)
  • 慢查询日志(slow query log)
  • 查询日志(query log)
  • 二进制文件(bin log)

错误日志

错误日志文件对 MySQL 的启动、运行、关闭过程进行了记录。遇到问题时应该首先查看该文件以便定位问题。该文件不仅记录了所有的错误信息,也记录一些警告信息或正确的信息
用户可以通过下面命令来查看错误日志文件的位置:

show variables like 'log_error'\G;

在这里插入图片描述


当 MySQL 不能正常启动时,第一个必须查找的文件应该就是错误日志文件,该文件记录了错误信息

慢查询日志

慢查询日志可以帮助定位可能存在问题的 SQL 语句,从而进行 SQL 语句层面的优化
默认文件名:主机名-slow.log

在这里插入图片描述

查询日志

查询日志记录了所有对 MySQL 数据库请求的信息,无论这些请求是否得到了正确的执行
默认文件名:主机名.log

在这里插入图片描述


从 MySQL 5.1 开始,可以将查询日志的记录放入 mysql 架构下的 general_log 表

在这里插入图片描述

二进制日志(binlog)

二进制日志记录了对 MySQL 数据库执行更改的所有操作,若操作本身没有导致数据库发生变化,该操作可能也会写入二进制文件。但是不包括 select 和 show 这类操作(因为这些操作对数据本身不会进行修改)
二进制日志的几种作用:

  • 恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制文件进行 point-in-time 的恢复
  • 复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的 MySQL 数据库(一般称为 slave 或 standby)与一台 MySQL 数据库(一般称为 master 或 primary)进行实时同步
  • 审计(audit):用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入的攻击

其他的数据文件

除了上边说的这些用户自己存储的数据以外,数据文件下还包括为了更好运行程序的一些额外文件,当然这些文件不一定会放在数据目录下,而且可以在配置文件或者启动时另外指定存放目录
主要包括这几种类型的文件:

  • 服务器进程文件

每运行一个 MySQL 服务器程序,都意味着启动一个进程。MySQL 服务器会把自己的进程 ID 写入到一个 pid 文件中
socket 文件:当用 UNIX 域套接字方式进行连接时需要的文件

在这里插入图片描述

  • 默认/自动生成的 SSL 和 RSA 证书和密钥文件

在这里插入图片描述
在这里插入图片描述


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

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

相关文章

macOS 配置flutter 环境

flutter 中文网 https://book.flutterchina.club 官方 :https://docs.flutter.dev/get-started/install/macos (本文基于此) 1. 本文在 MacOS 环境下配置 2. 要安装和运行Flutter,您的开发环境必须满足以下最低要求: 操作系统:macOS 磁盘空间:2.8 GB(不包括IDE/to…

哪款无线耳机音质好又便宜?性价比高音质好的蓝牙耳机推荐

无线蓝牙耳机发展至今,在各种性能的表现上越来越稳定、先进。人们在选择蓝牙耳机时可以根据自身需求来选择最适合的那款,而性价比和音质也成为了大多数人选择的关键要素之一。那么,哪款无线耳机音质好又便宜?下面,我来…

26.注解、动态代理

目录 一.注解 1.1 注解概述 1.2 注解的作用 1.3 自定义注解 1.3.1 什么是自定义注解 1.3.2 自定义注解格式 1.3.3 注意事项 1.3.4 代码示例 1.4 元注解 1.4.1 什么是元注解 1.4.2 种类 1.5 注解解析 1.5.1 什么是注解解析 1.5.2 相关接口 1.5.3 注意事项&#x…

Java配置45-idea 与 maven 版本兼容问题

昨天帮助同事安装开发环境,下载项目之后 idea 报错Unable to import maven project: See logs for details这是 idea 与 maven 版本不兼容引起的。同事安装的 idea 为 2019 版本,maven 为 3.8.5 版本。查看 maven官网:https://maven.apache.o…

Java对象分配过程以及面试题

public static void main(String[] args) {Math math new Math();math.compute(); } 对于Math类来说&#xff0c;他还有一个类对象, 如下代码所示&#xff1a; Class<? extends Math> mathClass math.getClass(); 这个类对象是存储在哪里的呢&#xff1f;这个类对象…

将nodejs文件打包成exe, 并设置开机自启动(没有黑窗口)

nodejs打包成exe 使用node的pkg包 # 安装pkg npm install -g pkg # 使用pkg打包, 该命令会同时编译 linux, win, mac 版的exe pkg server.js # 只打包win版 pkg -t win server.js如果安装pkg后提示 pkg不是内部命令, 重新打开cmd窗口再试,如果还提示,则需要配置环境变量 查看…

力扣刷题记录——796. 旋转字符串、884. 两句话中的不常见单词、1046. 最后一块石头的重量

本专栏主要记录力扣的刷题记录&#xff0c;备战蓝桥杯&#xff0c;供复盘和优化算法使用&#xff0c;也希望给大家带来帮助&#xff0c;博主是算法小白&#xff0c;希望各位大佬不要见笑&#xff0c;今天要分享的是——《力扣刷题记录——796. 旋转字符串、884. 两句话中的不常…

五金行业:强行业性的进销存系统具体看三项

很多五金的中小企业&#xff0c;都是从小作坊、个体户做大&#xff0c;普遍有着规模小&#xff0c;管理方式传统&#xff0c;行业内部管理水平偏低等缺陷。从年初忙到年尾&#xff0c;经营者也不清楚是赚是亏&#xff0c;竞争力不强&#xff0c;很多五金企业只要用上管理软件&a…

【HBase高级】1.重要工作机制(1)——读数据流程、数据存储流程

1. 重要工作机制 1.1 读数据流程 1.从zookeeper找到meta表的region的位置&#xff0c;然后读取meta表中的数据。而meta中又存储了用户表的region信息 ZK&#xff1a;/hbase/meta-region-server&#xff0c;该节点保存了meta表的region server数据 2.根据namespace、表名和row…

Elasticsearch:理解 query_string 和 simple_query_string 查询

针对很多的开发者来说&#xff0c;如果你不是很熟悉 DSL 查询&#xff0c;那么在有些情况下&#xff0c;query_string 及 simple_query_string 变得非常灵活及方便。在今天的文章中&#xff0c;我来比较一下这两种查询的方法。 准备数据 我们先使用 _bulk 命令创建如下的一个索…

Go语言入门学习(一)——变量,类型,运算符

Go语言入门学习&#xff08;一&#xff09;——变量&#xff0c;类型&#xff0c;运算符 最近看了蔡超老师与极客邦合作的Go语言学习教程&#xff0c;让我这个之前学java一知半解的我收获颇丰&#xff0c;所以想借此机会把自己的学习历程记录下来&#xff0c;以供后续的查阅 一…

【HoloLens 2 应用开发】自定义手部骨架可视化

推荐微信阅读&#xff1a;【HoloLens 2 应用开发】自定义手部骨架可视化 关闭默认可视化 首先关闭默认的手部可视化&#xff0c;详见上文。 添加预制件 首先&#xff0c;在场景中添加一个 sphere 的 GameObject 对象作为手部关节的预制件。 然后&#xff0c;在场景中添加一个…

CentOS7 网卡bondvlan bond

网卡bonding简介网卡绑定就是把多张物理网卡通过软件虚拟成一个虚拟的网卡&#xff0c;配置完毕后&#xff0c;所有的物理网卡的ip和mac将会变成相同的。多网卡同时工作可以提高网络速度&#xff0c;还可以实现网卡的负载均衡、冗余。bonding模式round-robin(mode0)轮转策略&am…

Docker - 3. 镜像常用命令 docker images、search、pull、rmi

目录 1. 帮助命令 2. 镜像命令 2.1 docker images [选项]&#xff1a;查看所有镜像、仓库、标签和大小 2.2 docker search [选项] 镜像名字&#xff1a;在 Docker Hub 中搜索镜像 2.3 docker pull 镜像名字[:tag]&#xff1a;下载镜像&#xff0c;tag为指定的版本 2.4 d…

MySQL索引特性

文章目录MySQL索引特性索引的概念认识磁盘磁盘的结构磁盘的随机访问&#xff08;Random Access&#xff09;与连续访问&#xff08;Sequential Access&#xff09;MySQL与磁盘交互的基本单位索引的理解观察主键索引现象推导主键索引结构的构建索引结构可以采用哪些数据结构聚簇…

PCI设备的访问方法_桥设备(type1)

PCI设备的访问方法_桥设备(type1) 文章目录PCI设备的访问方法_桥设备(type1)参考资料&#xff1a;一、 硬件结构二、 PCI设备类别及配置方法2.1设备类别2.2 配置设备时怎么选中它三、 配置示例3.1 示例&#xff1a;配置PCI Agent设备3.2 示例&#xff1a;配置PCI桥3.3 示例&…

ThinkPad R490电脑开机之后无限重启怎么重装系统?

ThinkPad R490电脑开机之后无限重启怎么重装系统&#xff1f;有用户使用ThinkPad R490电脑正常开机的情况下&#xff0c;出现了系统自动重启的情况&#xff0c;无法正常的使用电脑了。遇到这个情况怎么去重装一个新的电脑系统&#xff0c;恢复正常使用呢&#xff1f;来看看以下…

九种查找算法-红黑树

红黑树 2-3查找树能保证在插入元素之后能保持树的平衡状态&#xff0c;最坏情况下即所有的子节点都是2-node&#xff0c;树的高度为lgn&#xff0c;从而保证了最坏情况下的时间复杂度。但是2-3树实现起来比较复杂&#xff0c;于是就有了一种简单实现2-3树的数据结构&#xff0…

MySQL 数据库练习题记录02

文章目录前言一、数据库基础1.1 sql练习题1.2 sql语句执行顺序1.3 sql语句编写前言 本文主要记录B站视频视频链接的内容&#xff0c;做到知识梳理和总结的作用&#xff0c;项目git地址。 一、数据库基础 1.1 sql练习题 user表数据: idusername1张三2李四3王五4小刘 user_r…

代码随想录算法训练营第32天 回溯算法 java :491.递增子序列 46.全排列47.全排列 II

文章目录LeetCode 491.递增子序列题目详解注意难点示意图LeetCode 46.全排列题目讲解难点LeetCode47.全排列 II题目讲解示图难点总结LeetCode 491.递增子序列 题目详解 注意难点 在题目中有涉及到 子集序列中至少有两个元素 可以用来进行判断 在单层遍历之前需要声明一个数组…