1. 查询MySQL的存储路径

  1. find / -name mysql

1.1 数据库文件的存储路径

  1. show variables like 'datadir';

image.png

1.2 相关命令目录

相关命令存放于:/usr/bin/usr/sbin

1.3 配置文件目录

配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)

2. 数据库和文件系统的关系

每一个数据库中的每一张表,实际在主机中就是一个文件,读取数据的时候,采用对应的存储引擎进行读取。比较流行的有如下两种存储引擎:InnoDBMyISAM

2.1 InnoDB存储引擎

2.1.1 MySQL5.7-

每一个数据库都有对应的文件夹

image.png

每张表都有对应的两个文件

image.png

db.opt:用来记录表的字符集和排序规则等信息 *.frm:用来记录表的结构信息 *.ibd:独立表空间,可以用来存储表的数据 另外:

  • 系统表空间:默认情况下,InnoDB会在数据目录下创建一个名为ibdata1,大小为12M的自拓展文件,这个文件就是系统表空间在文件系统中的表示,所有数据库中的数据都可以存储在这个文件中
  • 独立表空间:在MySQL5.6.6和之后的版本中,InnoDB不会默认的将各个表的数据都存放在系统表空间中,而是给每一张表都建立一个独立的表空间,文件后缀为*.ibd,文件名与表名相同

2.1.2 MySQL8.0+

MySQL8.0+中不同的是,不再有*.ibd文件,而是将*.ibd文件中的内容合并到了*.frm

2.1.3 独立和系统表空间的切换

我们可以通过手动修改配置文件的方式,来指明使用系统表空间还是独立表空间

  1. [server]
  2. innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间

2.2 MyISAM存储引擎

2.2.1 表结构

在存储表结构方面,和InnoDB类似,都是在数据目录下对应的数据库目录中创建了一个专门用来描述表结构的文件*.frm

2.2.2 表中数据和索引

在MyISAM存储引擎中,所有的索引都是二级索引,并且数据和索引是分开存放的,所以在文件系统中也是采用不同的文件来存储数据和索引文件,同时表数据都存放在对应的数据库子目录下

  1. test.frm 存储表结构 #MySQL8.0 改为了 b.xxx.sdi
  2. test.MYD 存储数据 (MYData)
  3. test.MYI 存储索引 (MYIndex)