像InnoDB、MyISAM这样的存储引擎,都是将数据存储在文件系统上。
MySQL的数据目录 #
安装目录 #
用来存储MySQL的可执行文件等。
数据目录 #
用来存储MySQL在运行过程中产生的数据。
怎么确定数据目录? #
可以通过查看系统变量的值来查看数据目录的位置:
mysql> show variables like 'datadir';
数据目录的结构 #
每个数据库都对应数据目录下的一个子目录。
新建一个数据库时,MySQL会:
- 在数据目录下新建一个子目录。
- 在子目录下创建一个名为db.opt的文件,其中包含该数据库的一些属性,如字符集和比较规则。
数据目录中除了存储用户数据之外,还会存储一些额外的文件,比如服务器进程文件、服务器日志文件等。
表在文件系统中的表示 #
对于InnoDB存储引擎来说:
- 如果使用系统表空间存储表中的数据,那么只会在该表所在数据库对应的子目录下创建一个名为“表名.frm”的文件,表中的数据会存储在系统表空间对应的文件中。
- 如果使用独立表空间存储表中的数据,那么会在该表所在的数据库对应的子目录下创建一个名为“表名.frm”的文件和一个名为“表名.ibd”的文件,表中的数据会存储在这个“表名.ibd”文件中。
知识回顾:
- InnoDB其实是使用页为基本单位来管理存储空间的,默认的页大小为16KB。
- 对于InnoDB存储引擎来说,每个索引都对应着一颗B+树,该B+树的每个节点都是一个数据页。数据页之间没有必要时物理连续的,因为数据页之间有双向链表来维护这些页的顺序。
- InnoDB的聚簇索引的叶子节点存储了完整的用户记录,也就是所谓的“索引即数据,数据即索引”。
MySQL系统数据库简介 #
- mysql: 存储了mysql的用户账户和权限信息、一些存储过程和事件的定义信息、一些运行过程中产生的日志信息、一些帮助信息以及时区信息等。
- information_schema: 保存着mysql服务器维护的所有其他数据库的信息,比如有哪些表,哪些视图,哪些触发器,哪些列,哪些索引等。这些信息并不是真实的用户数据,而是一些描述性信息,也称为 元数据。
- performance_schema: 主要保存MySQL服务器运行过程中的一些状态信息,如最近执行了哪些局域,在执行过程的每个阶段都花费了多长时间,内存的使用情况等。
- sys: 这个数据库主要是通过视图的形式把information_schema和performance_schema中的信息整合起来,方便用户使用。