MySQL进阶:二、MySQL数据目录

1. 主要目录结构

MySQL数据库文件存放路径: /var/lib/mysql

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+

该文件夹下的文件如下

root@e6c4aa557f23:/var/lib/mysql# ls
auto.cnf         client-key.pem  ibdata1             private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem
ca.pem           ib_logfile0     mysql               server-cert.pem
client-cert.pem  ib_logfile1     performance_schema  server-key.pem

2.数据库和文件系统的关系

2.1 默认数据库

MySQL有四个默认数据库,如下

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
  • mysql

​ MySQL系统自带的核心数据库,它存储了MySQL的用户账户权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息。

  • information_schema

​ MySQL系统自带的数据库,保存着MySQL服务器维护所有其他数据库的信息,比如有哪些表,哪些视图,哪些触发器,哪些列,哪些索引等。这些不是真实用户数据,而是描述信息,也被称为元数据。在系统数据information_schema中提供了一些以innodb_sys开头的表,用于表示内部系统表。

# 表名区分大小写。
mysql> show tables like 'INNODB_SYS%'
    -> ;
+--------------------------------------------+
| Tables_in_information_schema (INNODB_SYS%) |
+--------------------------------------------+
| INNODB_SYS_DATAFILES                       |
| INNODB_SYS_VIRTUAL                         |
| INNODB_SYS_INDEXES                         |
| INNODB_SYS_TABLES                          |
| INNODB_SYS_FIELDS                          |
| INNODB_SYS_TABLESPACES                     |
| INNODB_SYS_FOREIGN_COLS                    |
| INNODB_SYS_COLUMNS                         |
| INNODB_SYS_FOREIGN                         |
| INNODB_SYS_TABLESTATS                      |
+--------------------------------------------+
10 rows in set (0.00 sec)
  • performance_schema

​ MySQL系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来监控MySQL服务的各类性能指标。包括最近执行哪些语句,执行过程中每个阶段花费的时间,内存的使用情况等。

  • sys

​ MySQL系统自带的数据库,主要是通过视图的形式把information_schemaperformance_schema结合起来,帮助开发人员监控MySQL的性能。

2.2 数据库在文件系统的表示

数据库目录内容如下:

root@e6c4aa557f23:/var/lib/mysql# cd /var/lib/mysql
root@e6c4aa557f23:/var/lib/mysql# ls
auto.cnf         client-key.pem  ibdata1             private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem
ca.pem           ib_logfile0     mysql               server-cert.pem
client-cert.pem  ib_logfile1     performance_schema  server-key.pem

这个数据目录下的文件和子目录比较多,除了information_schema这个系统数据库外,其他的数据库在数据目录下都有对应的子目录。

以自定义的数据库test01为例:

root@e6c4aa557f23:/var/lib/mysql/test01# ls
db.opt  human.frm  human.ibd

包括有三个文件

  • opt文件: MySQL5.7 中会在每个数据库的目录下生成 db.opt 文件用于保存数据库的相关配置。比如:字符集、比较规则。而MySQL8.0不再提供db.opt文件。
  • **frm文件:**用于描述表结构的文件。.frm文件的格式在不同的平台都是一样的。是以二进制的形式存储的,直接打开是乱码。
  • ibd文件:
    • **系统表空间:**默认情况下,InnoDB会在数据库目录下创建一个名为ibdata1、大小12M的文件,即为系统表空间在文件系统上的表示。该文件是一个自扩展文件,容量不足会自己扩展。
    • **独立表空间:**从MySQL5.6.6开始,InnoDB不再把表数据存储到系统表空间,而实为每个表建立独立表空间。而这个独立表空间对应的文件就是.ibd文件其中存储了对应的表中的数据和索引

我们可以自己指定使用 系统表空间 还是 独立表空间 来存储数据,这个功能由启动参数 innodb_file_per_table 控制,比如说我们想将表数据都存储到 系统表空间 时,可以在启动 MySQL服务器的时候这样配置:

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

默认情况

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    | # ON表示使用独立表空间
+-----------------------+-------+
1 row in set (0.00 sec)

MySQL 8.0将ibd文件和frm文件合并,只有一个ibd文件,并且不再提供db.opt文件,其中的字符集、比较规则信息也放在ibd文件中。

2.3 MyISAM的存储模式

2.3.1表结构

MyISAMInnoDB一模一样,也是在数据目录下对应的数据库子目录下创建一个专门描述表结构的文件,即表名.frm

2.3.2 数据和索引

MyISAM中索引全都是二级索引,该存储引擎的数据和索引分开存放。所以在文件系统中也使用了不同的文件来存储数据文件和索引文件,同时表数据都放在对应的数据库子目录下。

test.frm 存储表结构
test.MYD 存储数据 (MYData)
test.MYI 存储索引 (MYIndex)

过程中使用的版本为MySQL5.7.36
参考资料: 尚硅谷MySQL2022–宋红康

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值