之前学过了行格式,在往上面是页,最上层的也就学到了页。 现在的数据目录是什么?这之间有什么关系呢?带着这个问题,来继续学习。
数据库和文件系统的关系是什么?
InnoDB和MyISAMy 是把表存储在磁盘上面的,而磁盘是归操作系统管理的,这个东西叫做文件系统。 用专业一点的话来说,InnoDB是把表存储在文件系统上面的。 当我们想要读取数据的时候,InnoDB会从文件系统中把数据读出来返回给我们,当我们想要写入数据的时候,存储引擎会把这些数据重新写回到文件系统。
什么是MySQL的数据目录?
MySQL服务器程序启动的时候,会到文件系统的某个目录下面加载一些文件,之后运行的过程中的产生的数据页会存储到这个目录下面的某些文件夹中,这个目录就是数据目录。 MySQL的安装目录和数据目录不是同一个东西。
如何确定MySQL的数据目录?
数据目录的结构是什么?
一:数据库在文件系统中的表示
每当新建一个数据库,会做两件事情
1. 在数据目录下面创建一个和数据库同名的子目录
2. 在该数据库名同名的目录下面创建一个db.opt文件,这个文件记录了该数据库的各种属性,比如说字符集和比较规则等等。
我的数据和参考文章中的不一样,可能是MySQL的版本变了,存储这些数据方式也变了。
二:表在文件系统中的表示
这个是文档上面的
我看了一下我的
是不一样的,咱们就先直接跳过
三:表数据是如何存储的?
这个就比较简单了,我们之前都学过,是通过页来实现,通过B+树把这些页给连接起来。
此处也有一些补充知识点。 为了更好的管理这些页,InnoDB的大佬们提出了一个表空间或者文件空间的概念。每一个表空间可以被划分为很多很多的页,这些表数据就存放在某个表空间 下的某个页里。 这些表空间被划分为不同的类型,分别有系统表空间,独立表空间,其他类型的表空间。
系统表空间
大小12M,是自扩展文件, 可以在MySQL启动的时候更改名称,更改大小,更改文件路径,设置自动扩展等等等
需要注意的一点是,在一个MySQL服务器中,系统表空间只有一份。从MySQL5.5.7到MySQL5.6.6之间的各个版本中,我们表中的数据都会被默认存储到这个 系统表空间。
独立表空间
在MySQL5.6.6以及之后的版本中,InnoDB并不会把各个表的数据存储到系统表空间中,而是为每一个表建立了一个单独的表空间。 使用独立表空间的话,会在该表所属的数据库对应的子目录下面创建一个表示该表的独立表空间的文件,文件名和表明相同,同时使用 .ibd扩展名。
其他类型表空间
略
四:视图在文件中的存储(略)
五:其他的文件
服务器进程文件,服务器日志文件,证书秘钥文件等等。
文件系统对数据库的影响
MySQL的数据都是存放在文件系统中,所以就不得不受到一些制约。 比如说命名,表的大小,性能等方面。 例如:数据库名称和表名称不得超过文件系统所允许的最大长度;特殊字符的问题;文件长度受文件系统最大长度限制
MySQL系统数据库简介
每次启动MySQL,都有一些默认自带的数据库,这些数据库一般都是不能动的,因为不知道是做什么的,现在来大致看一下。
mysql数据库是核心,存储了账户密码和权限信息,存储过程,事件的定义信息,日志信息,时区信息等等;
information_schema 这个数据库里面保存的是MySQL服务器维护的所有其他的数据库信息,有哪些表,哪些触发器,那些列,那些索引等等,不是用户的真实数据,是一些描述性的信息,有时候也叫做元数据。
performance_schema 这个数据主要是保存MySQL服务器运行过程中的一些状态信息,是MySQL服务器的一个性能监控(噢噢噢,原来MySQL还有这个好东西,刚好我最近需要优化考试系统的查询速度,有了这个或许和很方便)。 包括统计最近执行了哪些语句,在每个阶段花费的时间,内存的使用情况等等。
sys 这个数据库主要是通过视图的形式把information_schema
和performance_schema
结合起来,让程序员可以更方便的了解MySQL服务器的一些性能信息。
回答一下文章开头的问题:
之前学过了行格式,在往上面是页,最上层的也就学到了页。 现在的数据目录是什么?这之间有什么关系呢?带着这个问题,来继续学习。
数据目录是页上面的部分,是存放于操作系统上面的文件系统上面的。