1. 查询MySQL的存储路径
find / -name mysql
1.1 数据库文件的存储路径
show variables like 'datadir';
1.2 相关命令目录
1.3 配置文件目录
配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
2. 数据库和文件系统的关系
每一个数据库中的每一张表,实际在主机中就是一个文件,读取数据的时候,采用对应的存储引擎进行读取。比较流行的有如下两种存储引擎:InnoDB
和MyISAM
2.1 InnoDB存储引擎
2.1.1 MySQL5.7-
每一个数据库都有对应的文件夹
每张表都有对应的两个文件
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 独立和系统表空间的切换
我们可以通过手动修改配置文件的方式,来指明使用系统表空间
还是独立表空间
[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间
2.2 MyISAM存储引擎
2.2.1 表结构
在存储表结构方面,和InnoDB类似,都是在数据目录
下对应的数据库目录中创建了一个专门用来描述表结构的文件*.frm
2.2.2 表中数据和索引
在MyISAM存储引擎中,所有的索引都是二级索引
,并且数据和索引是分开存放的
,所以在文件系统中也是采用不同的文件来存储数据和索引文件,同时表数据都存放在对应的数据库子目录下
test.frm 存储表结构 #MySQL8.0 改为了 b.xxx.sdi
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)