前言
简单介绍一下mysql的数据目录。
正文
对于mysql,我们关心的一般是数据部分,那么关心的就是数据目录。
我们查看一下数据目录的位置。
SHOW VARIABLES LIKE 'datadir'
看一下数据目录的位置:
再对比一下我们数据库的信息:
好像除了这个information_schema 好像都有一个目录。
那么是不是就是说里面的数据在里面呢? 是的,就是每一个都在里面。
前面我们知道了,页里面的行怎么分布的,页与页之间是怎么分布的。
这些都是逻辑,那么物理存储是怎么样的呢?
系统表空间(system tablespace)
系统表空间 可以对应文件系统上一个或多个实际的文件,默认情况下, InnoDB 会在 数据目录 下创
建一个名为 ibdata1 (在你的数据目录下找找看有木有)、大小为 12M 的文件,这个文件就是对应的 系统表空
间 在文件系统上的表示。
从MySQL5.5.7到MySQL5.6.6之间的各个版
本中,我们表中的数据都会被默认存储到这个 系统表空间。
独立表空间
在MySQL5.6.6以及之后的版本中, InnoDB 并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表
建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来存储表数据
的话,会在该表所属数据库对应的子目录下创建一个表示该 独立表空间 的文件,文件名和表名相同,只不过添
加了一个 .ibd 的扩展名而已,所以完整的文件名称长这样:
其中 test.ibd 文件就用来存储 test 表中的数据和索引。
然后就是一些mysql的系统数据库的简介:
mysql:
这个数据库贼核心,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过
程中产生的日志信息,一些帮助信息以及时区信息等。
账户密码和一些慢日志都是在里面。
information_schema:
这个数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪
些列、哪些索引吧啦吧啦。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为元数
据。
这里面是一些其他表的汇总。
performance_schema:
这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。
包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。
这里面是运行时候的信息。
sys:
这个数据库主要是通过视图的形式把 information_schema 和 performance_schema 结合起来,让程序员可以
更方便的了解MySQL服务器的一些性能信息。
结
下一节吧