简介:对于很多同学来说,如果能够看得见,有直观感受,对于一个事物的理解就很更加深刻。所以MySQL对于我们来说,直观的感受就一个服务(内存结构)和一些物理文件。内存结构我们看不到,但是我们能够看到这些物理文件, ...
对于很多同学来说,如果能够看得见,有直观感受,对于一个事物的理解就很更加深刻。 所以MySQL对于我们来说,直观的感受就一个服务(内存结构)和一些物理文件。 内存结构我们看不到,但是我们能够看到这些物理文件,所以我们先从这里开始。 如下是一个测试环境中得到的文件列表,我们来简单解读一下。 -rw-r----- 1 mysql mysql 56 Jan 2 2018 auto.cnf -rw-r----- 1 mysql mysql 860 Aug 26 22:49 dev01-slow.log drwxr-x--- 2 mysql mysql 20480 Nov 9 23:55 devopsdb -rw-r----- 1 mysql mysql 1053 Jan 20 15:44 ib_buffer_pool -rw-r----- 1 mysql mysql 79691776 Jan 20 15:44 ibdata1 -rw-r----- 1 mysql mysql 50331648 Jan 20 15:46 ib_logfile0 -rw-r----- 1 mysql mysql 50331648 Jan 20 15:46 ib_logfile1 -rw-r----- 1 mysql mysql 12582912 Jan 20 15:46 ibtmp1 drwxr-x--- 2 mysql mysql 4096 Sep 5 22:33 kmp -rw-r--r-- 1 mysql mysql 531 Jan 20 15:42 my.cnf drwxr-x--- 2 mysql mysql 4096 Sep 5 22:33 mysql -rw-r----- 1 mysql mysql 435 Jan 20 15:44 mysql-bin.000001 -rw-r----- 1 mysql mysql 169 Jan 20 15:44 mysql-bin.000002 -rw-r----- 1 mysql mysql 150 Jan 20 15:46 mysql-bin.000003 -rw-r----- 1 mysql mysql 57 Jan 20 15:46 mysql-bin.index -rw-r----- 1 mysql mysql 16432283 Jan 20 15:46 mysqld.log -rw-r----- 1 mysql mysql 6 Jan 20 15:46 mysqld.pid drwxr-x--- 2 mysql mysql 4096 Jan 2 2018 performance_schema drwxr-x--- 2 mysql mysql 12288 Jan 2 2018 sys drwxr-x--- 2 mysql mysql 4096 Dec 22 17:52 testdb 上面的列表信息量很大,如果我们一个一个解释一遍会很散乱,我们按照文件名和类型捋一下。 文件类型 文件名 说明 文件夹 performance_schema 数据库,MySQL的数据字典 文件夹 mysql 数据库,MySQL的数据字典 文件夹 sys 数据库,MySQL的数据字典 文件夹 testdb 数据库,存放应用数据 文件夹 kmp 数据库,存放应用数据 文件夹 devopsdb 数据库,存放应用数据 文件 my.cnf 参数文件,默认是从/etc/my.cnf中读取,也可以自定义 文件 mysql-bin.000001 二进制日志,即binlog,数据变化都会在二进制日志里面记录 文件 mysql-bin.000002 二进制日志,即binlog,数据变化都会在二进制日志里面记录 文件 mysql-bin.000003 二进制日志,即binlog,数据变化都会在二进制日志里面记录 文件 mysql-bin.index 二进制日志序列文件,里面会记录相应的binlog名称 文件 mysqld.pid MySQL服务的进程号 文件 mysqld.log 错误日志,记录数据库启动的日志,服务端的一些日志 文件 ibtmp1 innodb临时表的独立表空间 文件 ibdata1 系统表空间 文件 ib_logfile1 InnoDB层特有的日志文件,redo文件 文件 ib_logfile0 InnoDB层特有的日志文件,redo文件 文件 dev01-slow.log 慢日志,应用层面出现了查询性能较差的SQL,都会在慢日志里面记录下来 文件 auto.cnf MySQL启动时如果没有UUID,就会生成一个在这个文件 文件 ib_buffer_pool 5.7新特性,关闭MySQL时,会把内存中的热数据保存在这个文件,提高使用率和性能 如果我们查看文件夹中的文件,就会对MySQL数据存储有了一个直观的认识,比如数据库testdb中存在表t2,testdata,所在的文件夹下的文件列表如下: -rw-r----- 1 mysql mysql 61 Jun 26 2018 db.opt -rw-r----- 1 mysql mysql 8586 Jun 26 2018 t2.frm -rw-r----- 1 mysql mysql 114688 Jun 26 2018 t2.ibd -rw-r----- 1 mysql mysql 8632 Sep 3 23:16 testdata.frm -rw-r----- 1 mysql mysql 98304 Sep 3 23:49 testdataibd 这两个表都是InnoDB存储引擎存储,每个表会有两类文件:.frm和.ibd,其中.frm文件存放的是表结构信息,.ibd文件存放的是表数据。 对于分区表,.ibd文件将会是多个,不过互联网行业中对于分区表使用有限。 MySQL里面的文件蛮有意思,之前大体有两个参数来做基本的控制。一个是innodb_data_file_path就是一个共享表空间,数据都往这一个文件里放,也就是ibdata1,这个文件其实角色是有重复的,undo,数据都会放在一起。ibdata1会持续增长,无法收缩。另外一个参数是innodb_file_per_table,这样一来,就成了独立表空间,通俗一些就是每一个表都有独立的文件.frm和.ibd,而且实际中使用独立表空间还是比较普遍的,在MySQL 8.0之后这种情况又有了变化。 到了这里,我们基本对MySQL文件有了一个直观的认识。 我们简单总结一下,MySQL的文件大体是这样的结构: 本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yinxi.net学习互联网营销技术请到巅云建站www.yx10011.com。 |