41-MySQL的数据目录

一、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):存放索引信息文件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 数据库和文件系统的关系 我们知道像InnoDB、MyISAM这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管...
    tracy_668阅读 622评论 0 2
  • 数据库和文件系统的关系 1.存储引擎需要依赖操作系统的文件系统进行数据的读取和落盘 MySQL数据目录 1.MyS...
    简书徐小耳阅读 469评论 0 0
  • 如何确定MySQL中的数据目录 那说了半天,到底MySQL把数据都存到哪个路径下呢?其实数据目录对应着一个系统变量...
    括儿之家阅读 144评论 0 0
  • 查看数据目录 基本目录 auto.cnf:MySQL 服务器的选项文件,用于存储 server-uuid 的值。s...
    ggr阅读 179评论 0 0
  • 一、关于MySQL数据文件 MySQL文件包括MySQL所建数据库文件和MySQL所用引擎创建的数据库文件。 在M...
    Bogon阅读 926评论 0 0