目录
MySQL的主要目录结构
这里示范使用的是MySQL5.7
-
数据库文件的存放路径
mysql数据库文件的存放路径:/var/lib/mysql
show variables like 'datadir';
可以使用以上的方式查看路径
-
相关命令目录
命令目录:/usr/bin和/usr/sbin
-
配置文件目录
配置文件目录:/usr/share/mysql
数据库和文件系统的关系
-
查看默认数据库
查看数据库内容:
SHOW DATABASES;
其中有4个是属于mysql自带的系统数据库,分别是:
- information_schema
- mysql
- performance_schema
- sys
-
information_schema
这个数据库保存着mysql服务器维护的所有其他数据库的信息 ,包括表,视图,触发器,索引等。这些并不是真实的用户数据,而是一些描述性信息,也称之为元数据 。其中提供了一些以 innodb_sys 开头的表,用于表示内部系统表。
可以使用下一方式查看:
USE information_schema;
SHOW TABLES LIKE 'innodb_sys%';
-
mysql
它存储了mysql的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。
-
performance_schema
主要保存mysql服务器运行过程中的一些状态信息,可以用来监控mysql服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。
-
sys
库主要是通过视图的形式把information_schema和performance_schema结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。
-
数据库在系统中的表示
cd /var/lib/mysql
ll
除了information_schema这个系统数据库外,其他的数据库在此目录下都有对应的子目录。
这里以我的dbtest1为例:
这里的.pot .frm和.ibd格式会在后面提到
-
表在系统中的表示
-
InnoDB存储引擎模式
1.表结构
InnoDB在数据目录下对应的数据库子目录下创建了一个专门用于描述表结构的文件,文件名是这样:
表名称.frm
当你新建表时,那么会自动创建一个.frm格式的文件,用于描述表结构。.frm文件的格式在不同的操作系统上是统一的,使用二进制存储。
2.表中的数据和索引
(1).系统表空间(system tablespace)
InnoDB会在数据目录下创建一个名为ibdata1、大小为12M 的文件,这个文件就是对应的系统表空间在文件系统上的表示。它属于自扩展文件 ,当不够用的时候它会自增文件大小。
(2).独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每 一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来 存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd 的扩展名而已,所以完整的文件名称长这样:
表名称.ibd
比如:
(3).系统表空间与独立表空间的设置
可以自己指定使用系统表空间还是独立表空间来存储数据,这个功能由启动参数innodb_file_per_table控制,可以通过以下方式来修改:
innodb_file_per_table=0
0:代表使用系统表空间 1:代表使用独立表空间
也可以使用以下方法来查看当前的设置:
show variables like 'innodb_file_per_table';
(4).其他类型的表空间
随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用表空间(general tablespace)、临时表空间(temporary tablespace)等。
-
MyISAM存储引擎模式
1.表结构
这里和InnoDB 一样,也是创建了一个专门用于描述表结构的文件:
表名称.frm
2.表中数据和索引
在MyISAM中的索引全部都是二级索引 ,该存储引擎的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如 test 表使用MyISAM存储引擎的话,那么在它所在数据库对应的 atguigu 目录下会为test 表创建这三个文件:
表名称.frm
存储表结构
表名称.MYD
存储数据(MYData)
表名称.MYI
存储索引(MYIndex)