暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL体系结构---各个文件介绍

程序猿读历史 2021-05-31
1286

一、目录介绍



mysql到底是什么东西?如果能了解mysql各个文件的作用,也许对能更好的了解mysql。本文主要介绍mysql5.7.23版本的有哪些文件,各个文件的作用及其含义。

[root@192-168-0-171 mysql]# tree -L 2
├── conf
│ └── my.cnf
├── data
│ ├── auto.cnf
│ ├── ib_buffer_pool
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── ib_logfile2
│ ├── ibtmp1
│ ├── mysql
│ ├── performance_schema
│ ├── sys
│ └── test
├── logs
│ ├── error.log
│ ├── mysql-bin.000001
│ ├── mysql-bin.000002
│ ├── mysql-bin.index
│ └── slow.log
├── run
│ ├── mysql.pid
│ ├── mysql.sock
│ └── mysql.sock.lock
└── tmp

以上是mysql包含的所有文件,我将逐个解释每个文件的含义。

  • conf目录

该目录下只有一个my.cnf文件,这个文件是mysql的参数文件,mysql的所有参数信息都在该文件中。

  • data目录

该目录是mysql的数据文件,包含系统数据库和业务数据库。

-rw-r-----. 1 mysql mysql   56 9月  13 06:41 auto.cnf
-rw-r-----. 1 mysql mysql 417 9月 13 06:41 ib_buffer_pool
-rw-r-----. 1 mysql mysql 200M 9月 13 20:43 ibdata1
-rw-r-----. 1 mysql mysql 500M 9月 13 20:43 ib_logfile0
-rw-r-----. 1 mysql mysql 500M 9月 13 06:40 ib_logfile1
-rw-r-----. 1 mysql mysql 500M 9月 13 06:41 ib_logfile2
-rw-r-----. 1 mysql mysql 12M 9月 13 07:34 ibtmp1
drwxr-x---. 2 mysql mysql 4.0K 9月 13 06:41 mysql
drwxr-x---. 2 mysql mysql 8.0K 9月 13 06:41 performance_schema
drwxr-x---. 2 mysql mysql 8.0K 9月 13 06:41 sys
drwxr-x---. 2 mysql mysql 235 9月 13 20:43 test

data目录下各个文件的介绍:

auto.cnf: MySQL启动时如果没有UUID,就会生成一个在这个文件。
ib_buffer_pool: 5.7新特性,关闭MySQL时,会把内存中的热数据保存在这个文件,提高使用率和性能。
ibdata1:系统表空间。
ib_logfile0:InnoDB层特有的日志文件,redo文件。
ib_logfile1:InnoDB层特有的日志文件,redo文件。
ib_logfile2:InnoDB层特有的日志文件,redo文件。
ibtmp1:innodb临时表的独立表空间。
mysql:系统库,数据字典。
performance_schema:系统库,数据字典。
sys:系统库,数据字典。
test:业务库名称。

MySQL里面的文件蛮有意思,之前大体有两个参数来做基本的控制。一个是innodb_data_file_path就是一个共享表空间,数据都往这一个文件里放,也就是ibdata1,这个文件其实角色是有重复的,undo,数据都会放在一起。ibdata1会持续增长,无法收缩。另外一个参数是innodb_file_per_table,这样一来,就成了独立表空间,通俗一些就是每一个表都有独立的文件.frm和.ibd。

InnoDB存储引擎存储,每个表会有两类文件:.frm和.ibd,其中.frm文件存放的是表结构信息,.ibd文件存放的是表数据。对于分区表,.ibd文件将会是多个,不过互联网行业中对于分区表使用有限(分区表的优缺点以后会介绍)。

下图test库是业务库,可以看出当前test库下只有2个表:t_test_01和t_test_parttion,其中t_test_01是非分区表,t_test_parttion是分区表,有4个分区。

[root@192-168-0-171 data]# tree test
test
├── db.opt
├── t_test_01.frm
├── t_test_01.ibd
├── t_test_parttion.frm
├── t_test_parttion#P#p_2017.ibd
├── t_test_parttion#P#p_2018.ibd
├── t_test_parttion#P#p_2019.ibd
└── t_test_parttion#P#p_others.ibd
0 directories, 8 files

db.opt文件介绍:
1、create database时会自动生成一个文件db.opt,存放的数据库的默认字符集,show create database时显示数据库默认字符集即db.opt中字符集。**

2、这个文件丢失不影响数据库运行,该文件丢失之后新建表时,找不到数据库的默认字符集,就把character_set_server当成数据库的默认字符集,show create database时显示character_set_server字符集。

  • run目录

该目录主要包含pid文件和sockt文件,其中pid文件是mysql的进程文件,mysql被启动时会自动创建该文件。

  • logs目录

该目录是日志文件,包含:错误日志、慢查询日志、binlog、relaylog、general_query_log。

  • tmp目录

该目录是临时表空间


二、总结


到了这里,我们基本对MySQL文件有了一个直观的认识。 我们简单总结一下,MySQL的文件大体是这样的结构


文章转载自程序猿读历史,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论