zoukankan      html  css  js  c++  java
  • 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个区划分为一组,每个组的最开始的几个页面类型是固定的。

  • 相关阅读:
    在网易和百度实习之后,我才明白了这些事
    从Java小白到收获BAT等offer,分享我这两年的经验和感悟
    曾经做的一个JS小游戏——《Battle City》
    适配器(Adapter)模式
    装饰器(Decorator)模式
    Java IO
    JDBC中驱动加载的过程分析
    从PipedInputStream/PipedOutputStream谈起
    从InputStream到ByteArrayInputStream
    JDK中的动态代理
  • 原文地址:https://www.cnblogs.com/hangzhi/p/11100686.html
Copyright © 2011-2022 走看看