流苏小筑

MySQL目录结构与表在文件系统中的表示

Mysql的主要文件目录

Mysql的主要文件目录

1.数据库文件的存放路径
可以在linux系统使用命令查看:find / -name mysql

也可以进入mysql使用命令查看:show variables like 'datadir'

2.相关命令目录

/usr/bin和/usr/sbin

3.配置文件目录

/usr/share/mysql-5.7
/etc/my.cnf


数据库和文件系统的关系

1.查看数据库


● mysql表
○ 系统自带的核心表,存储了mysql的账户和权限信息,一些存储过程,事件的定义信息,一些日志,和时区信息。
● information_schema表
○ 自带数据库,保存着mysql维护的所有其他表信息,比如视图,触发器,列,索引等。
● performance_schema表
○ 数据库子代表,保存运行信息,主要用来监控数据库的运行状态和性能。

2.数据库在文件系统中的表示

在使用CREATE TABLE 数据库名命令创建数据库时,文件系统是怎么执行的。
创建test数据库

mysql> create database test;
Query OK, 1 row affected (0.02 sec)

进入刚才的数据库文件目录查看:/www/server/data

再进入test目录

可以看到mysql帮我们做了两件事

  1. 在文件目录下创建了一个和数据库同名的子目录。
  2. 在同名子目录下创建了一个db.opt文件(仅限5.7及以前版本),这个文件包含了该数据库的各种属性,比如字符集和比较规则。

3.表在文件系统中的表示

我们的数据都是以记录的形式插入代表中的,每个表的信息可以分为两种。

  1. 表结构的定义:表的名称,列名,类型,索引约束等。
  2. 表中的数据:存储的数据。

3.1InnoDB存储引擎

{callout color="#73aaff"}
注:InnoDB其实是使用为基本单位来管理存储空间的,默认页的大小为16KB
对于InnoDB引擎来说,每一个索引都对应一个B+树,该B+树的每个节点都是一个数据页,数据页之间不必要是物理连接,因为数据页之间有双向链表来维护着这些页的顺序。
InnoDB的聚簇索引的叶子节点存储了完整的用户记录,也就是所谓的索引即数据,数据即索引。
{/callout}

①系统表空间:
默认情况下,InnoDB会在数据目录下创建一个名为idbdata1,大小为12m的文件,这个文件就是对应的系统表空间,不够用会自动增加空间。可以配置文件修改路径和名称。

②独立表空间
在MySQL5.6以及以后版本中,InnoDB不会默认把各个表的数据存储到系统表空间,而是为每一个表建立一个独立的表空间。会在该表所属数据库的同名目录下创建一个和该表同名的文件,扩展名.idb

③系统表空间和独立表空间的设置
我们可以自己指定使用系统表空间还是独立表空间,由启动参数innodb_file_per_table控制。

[server]
innodb_file_per_table = 0; # 0 系统表空间 1 独立表空间

只对新建的表起作用,如果已经创建的表要修改可以使用以下命令。

alter table 表名 tablespace [=] innodb_file_per_table;

注:在MySQL8.0中,将.opt,.frm,.idb文件全部合到.idb文件中。
3.2 MyISAM存储引擎
1.表结构
在存储表结构方面,MyISAM和InnoDB一样,也是在数据目录下对应的同名目录下创建了一个专门用于描述表结构的文件:表名.frm。

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

test.frm 存储表结构(在MySQL8.0中是test.sdi)
test.MYD 存储数据(MYData)
test.MYI 存储索引(MYIndex)

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »