当前位置:网站首页>MySQL20-MySQL的数据目录
MySQL20-MySQL的数据目录
2022-07-06 09:11:00 【保护我方阿遥】
一. MySQL8的主要目录结构
find / -name mysql
安装好MySQL 8之后,我们查看如下的目录结构:
1.1. 数据库文件的存放路径
MySQL数据库文件的存放路径:/var/lib/mysql/
show variables like 'datadir';
从结果中可以看出,在我的计算机上MySQL的数据目录就是 /var/lib/mysql/ 。
1.2. 相关命令目录
相关命令目录:/usr/bin(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin。
1.3. 配置文件目录
配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
二. 数据库和文件系统的关系
2.1. 查看默认数据库
查看一下在我的计算机上当前有哪些数据库:
SHOW DATABASES;
可以看到有4个数据库是属于MySQL自带的系统数据库。
- mysql:MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。
- information_schema:MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以innodb_sys 开头的表,用于表示内部系统表。
- performance_schema:MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。
- sys: MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schema 和performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。
2.2. 数据库在文件系统中的表示
cd /var/lib/mysql
这个数据目录下的文件和子目录比较多,除了 information_schema 这个系统数据库外,其他的数据库在 数据目录 下都有对应的子目录。
2.3. 表在文件系统中的表示
2.3.1. InnoDB存储引擎模式
- 表结构
为了保存表结构, InnoDB 在 数据目录 下对应的数据库子目录下创建了一个专门用于 描述表结构的文件 ,文件名是这样:
表名.frm
比方说我们在MYSQLTEST 数据库下创建一个名为 test 的表:
create table test(
c1 int
);
那在数据库 MYSQLTEST 对应的子目录下就会创建一个名为 test.frm 的用于描述表结构的文件。.frm文件的格式在不同的平台上都是相同的。这个后缀名为.frm是以 二进制格式 存储的,我们直接打开是乱码的。
- 表中数据和索引
① 系统表空间(system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为 ibdata1 、大小为 12M 的文件,这个文件就是对应的 系统表空间 在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自己增加文件大小。
当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 ibdata1 这个文件名难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置文件:
[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
② 独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为 每一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个 .ibd 的扩展名而已,所以完整的文件名称长这样:
表名.ibd
比如:我们使用了 独立表空间 去存储 MYSQLTEST 数据库下的 test 表的话,那么在该表所在数据库对应的 atguigu 目录下会为 test 表创建这两个文件:
test.frm
test.ibd
其中 test.ibd 文件就用来存储 test 表中的数据和索引。
③ 系统表空间与独立表空间的设置
我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数innodb_file_per_table 控制,比如说我们想刻意将表数据都存储到 系统表空间 时,可以在启动MySQL服务器的时候这样配置:
[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间
④ 其他类型的表空间
随着MySQL的发展,除了上述两种老牌表空间之外,现在还新提出了一些不同类型的表空间,比如通用表空间(general tablespace)、临时表空间(temporary tablespace)等。
2.3.2. MyISAM存储引擎模式
- 表结构
在存储表结构方面, MyISAM 和 InnoDB 一样,也是在 数据目录 下对应的数据库子目录下创建了一个专门用于描述表结构的文件:
表名.frm
- 表中数据和索引
在MyISAM中的索引全部都是 二级索引 ,该存储引擎的 数据和索引是分开存放 的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件,同时表数据都存放在对应的数据库子目录下。假如 test表使用MyISAM存储引擎的话,那么在它所在数据库对应的 MYSQLTEST目录下会为 test 表创建这三个文件:
test.frm 存储表结构
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)
创建一个 MyISAM 表,使用 ENGINE 选项显式指定引擎。因为 InnoDB 是默认引擎。
2.4. 小结
举例: 数据库a , 表b 。
- 如果表b采用 InnoDB ,data\a中会产生1个或者2个文件:
- b.frm :描述表结构文件,字段长度等。
- 如果采用 系统表空间 模式的,数据信息和索引信息都存储在 ibdata1 中。
- 如果采用 独立表空间 存储模式,data\a中还会产生 b.ibd 文件(存储数据信息和索引信息)。
此外:
① MySQL5.7 中会在data/a的目录下生成 db.opt 文件用于保存数据库的相关配置。比如:字符集、比较规则。而MySQL8.0不再提供db.opt文件。
② MySQL8.0中不再单独提供b.frm,而是合并在b.ibd文件中。
- 如果表b采用 MyISAM ,data\a中会产生3个文件:
- MySQL5.7 中: b.frm :描述表结构文件,字段长度等。
- MySQL8.0 中 b.xxx.sdi :描述表结构文件,字段长度等。
- b.MYD (MYData):数据信息文件,存储数据信息(如果采用独立表存储模式)。
- b.MYI (MYIndex):存放索引信息文件。
边栏推荐
- Sed text processing
- MySQL26-性能分析工具的使用
- 百度百科数据爬取及内容分类识别
- MySQL35-主从复制
- 数据库中间件_Mycat总结
- PyTorch RNN 实战案例_MNIST手写字体识别
- MySQL31-MySQL事务日志
- 14 medical registration system_ [Alibaba cloud OSS, user authentication and patient]
- MySQL实战优化高手08 生产经验:在数据库的压测过程中,如何360度无死角观察机器性能?
- Super detailed steps to implement Wechat public number H5 Message push
猜你喜欢
Mysql27 index optimization and query optimization
MySQL real battle optimization expert 11 starts with the addition, deletion and modification of data. Review the status of buffer pool in the database
MySQL实战优化高手02 为了执行SQL语句,你知道MySQL用了什么样的架构设计吗?
MySQL27-索引优化与查询优化
Const decorated member function problem
Preliminary introduction to C miscellaneous lecture document
Bytetrack: multi object tracking by associating every detection box paper reading notes ()
Not registered via @enableconfigurationproperties, marked (@configurationproperties use)
Typescript入门教程(B站黑马程序员)
MySQL combat optimization expert 03 uses a data update process to preliminarily understand the architecture design of InnoDB storage engine
随机推荐
[after reading the series] how to realize app automation without programming (automatically start Kwai APP)
Preliminary introduction to C miscellaneous lecture document
C miscellaneous dynamic linked list operation
Mysql23 storage engine
第一篇博客
Windchill配置远程Oracle数据库连接
text 文本数据增强方法 data argumentation
Software test engineer development planning route
百度百科数据爬取及内容分类识别
MySQL實戰優化高手04 借著更新語句在InnoDB存儲引擎中的執行流程,聊聊binlog是什麼?
软件测试工程师必备之软技能:结构化思维
Super detailed steps to implement Wechat public number H5 Message push
Moteur de stockage mysql23
MySQL 29 other database tuning strategies
解决在window中远程连接Linux下的MySQL
Transactions have four characteristics?
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd0 in position 0成功解决
Solution to the problem of cross domain inaccessibility of Chrome browser
Use xtrabackup for MySQL database physical backup
MySQL combat optimization expert 04 uses the execution process of update statements in the InnoDB storage engine to talk about what binlog is?