美文网首页MySQL
41-MySQL的数据目录

41-MySQL的数据目录

作者: 紫荆秋雪_文 | 来源:发表于2022-09-21 11:32 被阅读0次

一、MySQL8的主要目录结构

1、查询与 MySQL 相关的目录

find / -name mysql
  • 查询结果
/etc/mysql
find: '/proc/1/map_files': Permission denied
/usr/bin/mysql
/usr/lib/mysqlsh/lib/python3.9/site-packages/oci/mysql
/usr/lib64/mysql
/var/lib/mysql
/var/lib/mysql/mysql

2、数据库文件的存放路径

  • 查询mingl
SHOW VARIABLES LIKE 'datadir';
#数据文件路径
/var/lib/mysql/
image.png
  • /var/lib/mysql路径下内容 image.png

3、数据库相关命令目录

  • /usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin image.png

4、数据库配置文件目录

/etc/my.cnf
  • my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

二、数据库和文件系统的关系

1、查看默认数据库

SHOW DATABASES ;
默认数据库.png
  • mysql 数据库:MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定
    义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

  • information_schema数据库:MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有
    哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以innodb_sys 开头的表,用于表示内部系统表

  • performance_schema数据库:MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息

  • sys数据库:MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schemaperformance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能

2、数据库文件系统

/var/lib/mysql
  • 所有数据库内容
-rw-r-----  1 mysql mysql   196608 Sep 15 04:35 '#ib_16384_0.dblwr'
-rw-r-----  1 mysql mysql  8585216 Aug 16 09:51 '#ib_16384_1.dblwr'
drwxr-x---  2 mysql mysql     4096 Sep 15 04:33 '#innodb_redo'
drwxr-x---  2 mysql mysql      187 Sep 15 04:33 '#innodb_temp'
drwxr-xr-x 11 mysql root      4096 Sep 15 04:33  .
drwxr-xr-x  1 root  root        28 Sep 14 21:58  ..
drwxr-x---  2 mysql mysql      189 Aug 16 10:11  atguigudb
-rw-r-----  1 mysql mysql       56 Aug 16 09:51  auto.cnf
-rw-r-----  1 mysql mysql  3025278 Aug 16 09:51  binlog.000001
-rw-r-----  1 mysql mysql      180 Aug 16 09:54  binlog.000002
-rw-r-----  1 mysql mysql      180 Aug 16 09:57  binlog.000003
-rw-r-----  1 mysql mysql      180 Aug 16 09:58  binlog.000004
-rw-r-----  1 mysql mysql      180 Aug 16 10:06  binlog.000005
-rw-r-----  1 mysql mysql    49079 Aug 16 10:11  binlog.000006
-rw-r-----  1 mysql mysql      157 Aug 17 01:32  binlog.000007
-rw-r-----  1 mysql mysql      157 Aug 19 03:32  binlog.000008
-rw-r-----  1 mysql mysql      157 Aug 19 03:38  binlog.000009
-rw-r-----  1 mysql mysql      157 Aug 19 09:08  binlog.000010
-rw-r-----  1 mysql mysql      157 Aug 20 13:21  binlog.000011
-rw-r-----  1 mysql mysql     1355 Aug 22 01:09  binlog.000012
-rw-r-----  1 mysql mysql    13529 Aug 22 22:23  binlog.000013
-rw-r-----  1 mysql mysql      157 Aug 26 13:57  binlog.000014
-rw-r-----  1 mysql mysql     9435 Aug 26 20:00  binlog.000015
-rw-r-----  1 mysql mysql    32071 Aug 27 05:49  binlog.000016
-rw-r-----  1 mysql mysql     3868 Sep  7 09:39  binlog.000017
-rw-r-----  1 mysql mysql      620 Sep  7 09:53  binlog.000018
-rw-r-----  1 mysql mysql      157 Sep  7 09:56  binlog.000019
-rw-r-----  1 mysql mysql      157 Sep  7 14:40  binlog.000020
-rw-r-----  1 mysql mysql    59292 Sep 10 02:44  binlog.000021
-rw-r-----  1 mysql mysql  1414864 Sep 13 23:24  binlog.000022
-rw-r-----  1 mysql mysql      157 Sep 15 04:33  binlog.000023
-rw-r-----  1 mysql mysql      157 Sep 15 04:33  binlog.000024
-rw-r-----  1 mysql mysql      384 Sep 15 04:33  binlog.index
-rw-------  1 mysql mysql     1676 Aug 16 09:51  ca-key.pem
-rw-r--r--  1 mysql mysql     1112 Aug 16 09:51  ca.pem
-rw-r--r--  1 mysql mysql     1112 Aug 16 09:51  client-cert.pem
-rw-------  1 mysql mysql     1680 Aug 16 09:51  client-key.pem
-rw-r-----  1 mysql mysql     4287 Aug 16 10:11  ib_buffer_pool
-rw-r-----  1 mysql mysql 12582912 Sep 15 04:33  ibdata1
-rw-r-----  1 mysql mysql 12582912 Sep 15 04:33  ibtmp1
drwxr-x---  2 mysql mysql      143 Aug 16 09:51  mysql
-rw-r-----  1 mysql mysql 31457280 Sep 15 04:33  mysql.ibd
lrwxrwxrwx  1 mysql mysql       27 Sep 15 04:33  mysql.sock -> /var/run/mysqld/mysqld.sock
drwxr-x---  2 mysql mysql     8192 Aug 16 09:51  performance_schema
-rw-------  1 mysql mysql     1676 Aug 16 09:51  private_key.pem
-rw-r--r--  1 mysql mysql      452 Aug 16 09:51  public_key.pem
-rw-r--r--  1 mysql mysql     1112 Aug 16 09:51  server-cert.pem
-rw-------  1 mysql mysql     1680 Aug 16 09:51  server-key.pem
drwxr-x---  2 mysql mysql       28 Aug 16 09:51  sys
drwxr-x---  2 mysql mysql       57 Aug 26 22:06  test
drwxr-x---  2 mysql mysql       21 Aug 27 02:11  test15
drwxr-x---  2 mysql mysql       73 Sep 10 13:52  trg
-rw-r-----  1 mysql mysql 16777216 Sep 15 04:35  undo_001
-rw-r-----  1 mysql mysql 16777216 Sep 15 04:35  undo_002
  • 某个具体数据库(test)
  • 进入数据库
cd test
  • 数据库内容
drwxr-x---  2 mysql mysql     57 Aug 26 22:06 .
drwxr-xr-x 11 mysql root    4096 Sep 15 04:33 ..
-rw-r-----  1 mysql mysql 114688 Aug 26 20:03 dept.ibd
-rw-r-----  1 mysql mysql 114688 Sep 10 11:20 emp.ibd
-rw-r-----  1 mysql mysql 114688 Aug 26 22:06 employee.ibd

三、表在文件系统中的表示

1、InnoDB存储引擎模式

1、表结构

为了保存表结构,InnoDB数据目录下对应的数据库子目录下创建了一个专门用于 描述表结构的文件,文件名是这样的

表名.frm

2、 表中数据和索引

  • 系统表空间(system tablespace)

默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1 、大小为 12M 的文件,这个文件就是对应的 系统表空间 在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自己增加文件大小。当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置文件

[server] 
innodb_data_file_path=data1:512M;data2:512M:autoextend
  • 独立表空间(file-per-table tablespace)

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

表名.ibd
  • MySQL8中数据库表
drwxr-x---  2 mysql mysql     57 Aug 26 22:06 .
drwxr-xr-x 11 mysql root    4096 Sep 15 04:33 ..
-rw-r-----  1 mysql mysql 114688 Aug 26 20:03 dept.ibd
-rw-r-----  1 mysql mysql 114688 Sep 10 11:20 emp.ibd
-rw-r-----  1 mysql mysql 114688 Aug 26 22:06 employee.ibd
  • 系统表空间与独立表空间的设置

我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数innodb_file_per_table 控制,比如说我们想刻意将表数据都存储到 系统表空间 时,可以在启动MySQL服务器的时候这样配置

[server] 
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间
  • 查看系统表空间
SHOW VARIABLES LIKE 'innodb_file_per_table';
image.png
  • 其他类型的表空间

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

2、MyISAM存储引擎模式

  • 表结构

在存储表结构方面, MyISAM 和 InnoDB 一样,也是在 数据目录 下对应的数据库子目录下创建了一个专门用于描述表结构的文件

  • 表中数据和索引

在MyISAM中的索引全部都是 二级索引 ,该存储引擎的 数据和索引是分开存放 的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如 cdtest
表使用MyISAM存储引擎的话,那么在它所在数据库对应的 atguigu 目录下会为 test 表创建这三个文件:

-rw-r-----  1 mysql mysql      0 Sep 15 04:56 student_myisam.MYD
-rw-r-----  1 mysql mysql   1024 Sep 15 04:56 student_myisam.MYI
-rw-r-----  1 mysql mysql   4332 Sep 15 04:56 student_myisam_442.sdi

三、小结

举例: 数据库a , 表b

  • 1、如果表b采用 InnoDB ,data\a中会产生1个或者2个文件:
    • b.frm :描述表结构文件,字段长度等
    • 如果采用 系统表空间 模式的,数据信息和索引信息都存储在 ibdata1
    • 如果采用 独立表空间 存储模式,data\a中还会产生 b.ibd 文件(存储数据信息和索引信息)
      此外:
  • ① MySQL5.7 中会在data/a的目录下生成 db.opt 文件用于保存数据库的相关配置。比如:字符集、比较
    规则。而MySQL8.0不再提供db.opt文件。
  • ② MySQL8.0中不再单独提供b.frm,而是合并在b.ibd文件中。
  • 2、如果表b采用 MyISAM ,data\a中会产生3个文件:
    • MySQL5.7 中: b.frm :描述表结构文件,字段长度等。
    • MySQL8.0 中 b.xxx.sdi :描述表结构文件,字段长度等
    • b.MYD (MYData):数据信息文件,存储数据信息(如果采用独立表存储模式)
    • b.MYI (MYIndex):存放索引信息文件

相关文章

  • 41-MySQL的数据目录

    一、MySQL8的主要目录结构 1、查询与 MySQL 相关的目录 查询结果 2、数据库文件的存放路径 查询min...

  • 数据目录

    进入内置储存卡的根目录,可看见一个名为「ygocore」的文件夹,在这里储存了各种数据。如下图所示: ⊙de...

  • PE:导入表定位

    导入表是数据目录中注册的数据类型之一,基描述信息位于数据目录的第2个目录项中。IAT导入函数也是数据目录注册的数据...

  • Mysql InnoDB引擎逻辑存储与MVVC实现

    1,data目录与数据表文件 1)ps aux | grep mysql,找到数据目录如下图,数据目录中的数据库个...

  • 第二周作业-安装部署

    1.为什么数据目录和日志目录需要分开? 数据目录存放数据文件需要随机读写较多,所以把数据目录挂载在SSD上,利用S...

  • InnoDB 表空间(一)

    MySQL 数据目录 如何确定 MySQL 数据目录> SHOW VARIABLES LIKE 'datadir'...

  • Mysql数据目录

    查看数据目录 基本目录 auto.cnf:MySQL 服务器的选项文件,用于存储 server-uuid 的值。s...

  • 2.1docker数据管理

    一:数据拷贝 二:数据卷和使用 数据卷:宿主机的存储目录, 要将目录中的数据和docker容器进行数据共享 三:数...

  • linux入门知识点

    linux目录结构树形结构 / 根目录:所有数据都在此目录下(Linux系统的起点) /dev:存放设备相关数据 ...

  • 2019-05-21——Mongo 安装运行

    1、安装 2、创建数据库目录 MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创...

网友评论

    本文标题:41-MySQL的数据目录

    本文链接:https://www.haomeiwen.com/subject/erybortx.html