MySql--数据目录

数据库和文件系统的关系

  • 1.存储引擎需要依赖操作系统的文件系统进行数据的读取和落盘

MySQL数据目录

  • 1.MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件
  • 2.在运行过程中产生的数据也都会存储到这个目录下的某些文件中
  • 3.这些目录就是数据目录

数据目录和安装目录的区别

  • 1.安装目录主要是mysql启动时候需要加载的一些目录
  • 2.数据目录是mysql运行时候需要的目录

如何确定MySQL中的数据目录

  • 1.通过SHOW VARIABLES LIKE 'datadir'查询数据目录的位置

数据目录的结构

数据库在文件系统中的表示(即数据库相关信息在datadir)

  • 1.每个数据库都对应数据目录下的一个子目录,或者说对应一个文件夹
  • 2.子目录和数据库名同名
  • 3.同时在子目录下创建一个名为db.opt的文件--该文件包含了数据库的相关属性(字符集和比较规则等)

表在文件系统中的表示

  • 1.表可以分为表的结构定义和表中的数据
  • 2.表结构--表的名称,列数,列的类型,约束条件和索引等,采用了表名.frm保存该信息
  • 3.表数据针对不同的引擎采用不同的方式处理

InnoDB是如何存储表数据的

  • 1.InnoDB是采用页为基本单位来管理存储空间的
  • 2.一个索引就是一个B+树,树的每个节点就是一个数据页,页之间只需要逻辑连续即可
  • 3.通过表空间(文件空间)来管理整个数据存储空间
  • 4.一个表空间内部包含很多的页

表空间类型

  • 1.系统表空间(system tablespace)
  • 2.独立表空间(file-per-table tablespace)
  • 3.其他类型的表空间:通用表空间(general tablespace)、undo表空间(undo tablespace)、临时表空间(temporary tablespace)

系统表空间(system tablespace)

  • 1.对应文件系统上一个或者多个实际的文件
  • 2.默认情况下会在数据目录下创建一个ibdata1,该文件会随着数据的增加自动扩展
  • 3.通过innodb_data_file_path=data1:512M;data2:512M:autoextend可以配置多个文件并且指定初始大小
  • 4.也可以吧系统表空间对应的文件路径配置到其他路径(即不在数据目录下)
  • 5.在一个MySQL服务器中,系统表空间只有一份,虽然文件可以有多个,在mysql5.5.7-5.6.6 数据都会默认存储到系统表空间

独立表空间

  • 1.在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间
  • 2.独立表空间的名称---表名.ibd
  • 3.一般和表结构放在一个目录下。
  • 4.通过innodb_file_per_table=0来指定启动系统表空间还是独立表空间,0代表启用系统空间,1代表独立子空间。
  • 5.上述参数只对新建的表起作用。

视图在文件系统中的表示

  • 1.MySQL中的视图其实是虚拟的表,所以在存储视图的时候是不需要存储真实的数据的,只需要把它的结构存储起来就行了。
  • 2.描述视图结构的文件也会被存储到所属数据库对应的子目录下边,只会存储一个视图名.frm的文件。

数据目录下的其他文件

  • 1.服务器进程文件--MySQL服务器会把自己的进程ID写入到一个文件中。
  • 2.服务器日志文件--常规的查询日志、错误日志、二进制日志、redo日志
  • 3.默认/自动生成的SSL和RSA证书和密钥文件。

文件系统对数据库的影响

  • 1.数据库名称和表名称不得超过文件系统所允许的最大长度。
  • 2.特殊字符的问题--为了避免因为数据库名和表名出现某些特殊字符而造成文件系统不支持的情况,MySQL会把数据库名和表名中所有除数字和拉丁字母以外的所有字符在文件名里都映射成 @+编码值的形式作为文件名
  • 3.文件长度受文件系统最大长度限制

MySQL系统数据库简介

mysql

  • 它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等

information_schema

  • 保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引

performance_schema

  • 保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息

sys

  • 主要是通过视图的形式把information_schema和performance_schema结合起来,让程序员可以更方便的了解MySQL服务器的一些性能信息。

你可能感兴趣的:(MySql--数据目录)