MySQL的数据目录

来源

MySQL的几个存储引擎如InnoDB和MyISAM都是将数据存储到磁盘上,而我们的操作系统是通过文件系统来管理磁盘的,所以可以说这几个存储引擎都是将表存储在文件系统上的,而我们通过操作文件系统来读写数据。

定义

数据目录存储MySQL服务器在运行过程重产生的数据,且在服务器程序启动时会从这个目录下加载一些文件。与安装目录不同,安装目录存储了许多控制服务器和客户端程序的命令。

结构

通过语句 SHOW VARIABLES LIKE 'datadir'; 可查看数据目录地址。

如下图为这个数据目录下的内容,information_schema比较特殊,没有使用相应的数据库目录

已知数据目录位置,我们创建的数据库就会在该文件夹下面生成一个同名子目录,并在这个子目录下创建一个名为db.opt的文件,这个文件包含该数据库的各种属性,如字符集/比较规则等

如下图为数据库tcc目录下的内容,它包含表结构的定义和表数据

不同的存储引擎存储表数据不同
  • InnoDB
    • 页为基本单位管理存储空间

    • 索引对应一颗B+树,B+树每个节点对应一个数据页

    • InnoDB提出表空间/文件空间的概念来对应文件系统上一个或多个真实文件,我们的表数据就存放在某个表空间下的某些页里

      • 系统表空间:存储于数据目录下名为ibdata1,是个自扩展文件,可通过修改配置文件修改其位置大小;系统表空间在一个MySQL服务器中只有一份,MySQL5.5.7-5.6.6版本之间,表中数据默认存储到这个系统表空间
      • 独立表空间:MySQL5.6.6版本之后InnoDB不会默认将表数据(数据+索引)存储到系统表空间而是单独为每一个表创建一个独立表空间,存储于每个数据库目录下以.ibd为扩展名;
      • 可通过配置innodb_file_per_table=0孔子数据存储到系统表空间,1为存储到独立表空间,若想将原来的数据迁移到系统/独立表空间可使用语句ALTER TABLE 表名 TABLESPACE [=] innodb_system;系统表空间只存放一些系统数据,独立表空间只存放这个表的数据
      • 其他类型的表空间.......
  • MyISAM
    • MyISAM的索引全是二级索引,且数据和索引是分开存储的,所以使用不同的文件来存储数据文件和索引文件
    • 没有表空间,表数据存储到对应的数据库子目录下,.MYD代表数据文件,.MYI代表索引文件

 

视图

MySQL中的视图其实是虚拟的表,所以存储视图不需要存储真实数据,只要存储其结构,以.frm文件存储到数据库对应的目录下;8.0版本之后就没有.frm文件了

其他文件

数据目录下还存放一些其他的文件以更好的运行程序

  • 服务器进程文件
  • 服务器日志文件
  • 默认/自动生成的SSL和RSA证书和密钥文件

 

InnoDB的表空间

  • 独立表空间结构
  • 系统表空间结构

表空间被划分为许多连续的extent,每个区默认由64个页组成,每256个区划分为一组,每个组的最开始的几个页面类型是固定的。

posted on 2019-06-28 08:31  hangzhi  阅读(7456)  评论(0编辑  收藏  举报

导航