Mysql 第02章 MySQL的数据目录
本文最后更新于 2023-09-14,文章内容可能已经过时。
第02章 MySQL的数据目录
1. MySQL8的主要目录结构
find / -name mysql
1.1 数据库文件的存放路径
show variables like 'datadir';
显示的目录:/var/lib/mysql/
类比相当于 windows环境下的 Data文件夹目录
1.2 相关命令目录
类比相当于 windows环境下的 bin 文件夹目录
相关命令目录:/usr/bin 和/usr/sbin。
1.3 配置文件目录
my.cnf
文件就等同于windows环境下的 my.imi
配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
2. 数据库和文件系统的关系
show databases;
可以看到有mysql的默认库
- mysql
自带的核心数据库,存储了Mysql的用户账户和权限信息,一些存储过程,事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息和时区信息。
use mysql;
select Host,User from user;
update user set host = '%' where user ='root';
flush privileges;
基础篇用过上面的命令修改登录的host
信息
- information_schema
mysql自带的数据库,这个数据库保存着维护所有其他数据库的信息
,比如有哪些表,哪些视图,哪些触发器,哪些列,哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为元数据
。在系统数据库information_schema
中提供了一些以innodb_sys
开头的表,用于表示内部系统表、
- performance_schema
Mysql
自带的数据库,这个数据库,主要保存一些mysql
服务器运行过程中的一些状态信息,可以用来监控 Mysql 服务的各类性能指标
。包括统计最近执行了哪些语句,在执行过程每个阶段花费了多长时间,内存的使用情况等。
- sys
Mysql自带的数据库,这个数据库主要是通过视图
的方式,把information_schema
和performance_schema
结合起来,帮助系统管理员和开发人员监控Mysql
的技术性能。
2.1 表在文件系统中的表示
2.3.1 InnoDB存储引擎模式
1. 表结构
为了保存表结构,InnoDB
在 数据目录
下对应的数据库子目录下创建了一个专门用于 描述表结构的文件
如果是创建视图会发现只有这个 xxx.frm
文件,说明视图不存储数据,mysql8创建视图是没有单独的文件的,记录在表里
表名.frm
2. 表中数据和索引
① 系统表空间(system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为ibdata1
、大小为12M
的自拓展
文件,这个文件就是对应的系统表空间
在文件系统上的表示。
② 独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间
,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间
来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同。
ibd文件可以使用内置的oracle的 idb2sdi
工具解析,直接使用指令然后指明文件名,就可以打开,里面是 json
串,就可以看到表结构的信息都被存在里面。
表名.ibd
MySQL8.0中不再单独提供
表名.frm
,这个文件存储的是表结构的【字段名,字段属性,约束等】,8.0合并在表名.ibd
文件中。
同时/var/lib/mysql/【数据库名】
下文件夹内,也有对应名字的文件,这个是5.7有的,而8.0没有。
db.opt
这个opt文件存放的是代表这个数据库对应的字符集,或者是有哪些列的信息。同样,mysql8也合并到idb文件里面了。
③ 系统表空间与独立表空间的设置
我们可以自己指定使用系统表空间
还是独立表空间
来存储数据,这个功能由启动参数innodb_file_per_table
控制
[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间
④ 其他类型的表空间
随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用表空间(general tablespace)、临时表空间(temporary tablespace)等。
2.3.2 MyISAM存储引擎模式
1. 表结构
在存储表结构方面, MyISAM 和 InnoDB 一样,也是在 数据目录
下对应的数据库子目录下创建了一个专门用于描述表结构的文件
表名.frm
2. 表中数据和索引
在MyISAM中的索引全部都是二级索引
,该存储引擎的数据和索引是分开存放
的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。
test.frm 存储表结构 #MySQL8.0 改为了 b.xxx.sdi
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)
- 感谢你赐予我前进的力量