1. 数据库和文件系统的关系

像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。

2.MySQL数据目录

区别于MySQL安装目录(安装目录存储了许多控制服务器和客户端程序的命令),数据目录是用来存储MySQL在运行过程中产生的数据

2.1 查找MySQL数据目录的位置

因为数据目录是记录在系统变量’datadir’中的,因此直接输入命令就在找到

mysql> SHOW VARIABLES LIKE 'datadir';

2.2 数据目录的结构

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

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

2.3 文件系统中InnoDB表的表示

对于 InnoDB 存储引擎的数据表,一个表对应两个文件,一个是 *.frm,存储表结构信息;一个是 *.ibd,存储表中数据

2.4 存储表数据

InnoDB中的数据是以页为基本单位的,为了更好的管理这些页,MySQL引入了表空间,它可以对应文件系统上一个或多个真实文件。每一个表空间可以被划分为很多很多很多个页,我们的表数据就存放在某个表空间下的某些页里。

2.4.1 系统表空间

默认情况下,InnoDB会在数据目录下创建一个名为ibdata1、大小为12M的文件,这个文件就是对应的系统表空间在文件系统上的表示。

在一个MySQL服务器中,系统表空间只有一份。从MySQL5.5.7到MySQL5.6.6之间的各个版本中,我们表中的数据都会被默认存储到这个 系统表空间。

2.4.2 独立表空间

在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立表空间,也就是说我们创建了多少个表,就有多少个独立表空间。使用独立表空间来存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表名相同,只不过添加了一个.ibd的扩展名而已

2.5 文件系统中MyISAM表的表示

因为该存储引擎的数据和索引是分开存放的。所以在文件系统中也是使用不同的文件来存储数据文件和索引文件。而且和InnoDB不同的是,MyISAM并没有什么所谓的表空间一说,表数据都存放到对应的数据库子目录下

因此在构成上,MyISAM需要比innoDB多一个文件,并且文件的后缀名也与innoDB存在区别:

  • test.frm
  • test.MYD
  • test.MYI

2.6 文件系统中视图的表示

因为视图实际上是一种虚拟的表,并没有实际数据的存在,因此只需要用一个*.frm文件存储在对应的数据库子目录即可。

2.7 数据目录下的其他的文件

  • 服务器进程文件。

我们知道每运行一个MySQL服务器程序,都意味着启动一个进程。MySQL服务器会把自己的进程ID写入到一个文件中。

  • 服务器日志文件。

在服务器运行过程中,会产生各种各样的日志,也需要被存储。

  • 默认/自动生成的SSL和RSA证书和密钥文件。

3.文件系统对数据库的影响

  • 文件名长度的影响
    数据库产生的文件,文件名受限于文件系统支持的最大长度
  • 文件大小的影响
    对于数据库中的文件,它们受限于文件系统所支持的最大文件大小
  • 特殊字符的影响
    为了避免因为数据库名和表名出现某些特殊字符而造成文件系统不支持的情况,MySQL会把数据库名和表名中所有除数字和拉丁字母以外的所有字符在文件名里都映射成 @+编码值的形式作为文件名。

4.MySQL系统数据库

MySQL会默认存在几个系统数据库

  1. information_schema
  • information_schema提供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有时用于表述该信息的其他术语包括“数据词典”和“系统目录”。)
  • 换句换说,information_schema是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息。(如数据库名,数据库的表,表栏的数据类型与访问权 限等。) 在INFORMATION_SCHEMA中,有几张只读表。它们实际上是视图,而不是基本表。
  • 查看具体表:

  1. mysql
  • mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中修改root用户的密码)。
  1. performance_schema
  • 主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。MySQL5.7默认是开启的。
  1. sys
  • Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。

深入理解InnoDB(5)-文件系统相关推荐

  1. 怎样理解Linux的文件系统

    怎样理解Linux的文件系统 Linux所有文件都从root开始,用'/'代表, 并且延伸到子目录.DOS/Windows有不同的分区同时目录都存于分区上.Linux则通过'加载'的方式把所有分区都放 ...

  2. 理解内存和文件系统缓存

    理解记忆和文件系统缓存 2出4额定的帮助- 率这一主题 窗户 2000分配部分的虚拟内存系统的文件系统缓存.文件系统缓存内存子系统,保留最近使用的信息快速存取.缓存的大小取决于物理内存的安装和记忆所需 ...

  3. MySQL 高级 —— 深入理解 InnoDB 与 MyISAM

    引言 在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录.创建表时,MySQL会在数据库子目录下创建一个与表同名的.frm文件保存表的定义.因为MySQL使用 ...

  4. 在文件log 加入commit id_从物理文件理解InnoDB Redo Log

    导读 作为MySQL DBA都应该知道,Redo Log是可被覆盖的,是ACID中的D的最重要的构成部分,也就是关系型数据库中的WAL中的L. Redo Log记录的是redo,那么redo是什么呢? ...

  5. 深入理解InnoDB(4)—索引使用

    1. 索引的代价 在了解索引的代价之前,需要再次回顾一下索引的数据结构B+树 如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块 ...

  6. 深入理解InnoDB(1)—行的存储结构

    1.InnoDB页的简介 页(Page)是 Innodb 存储引擎用于管理数据的最小磁盘单位.常见的页类型有数据页.Undo 页.系统页.事务数据页等 2.InnoDB行的存储格式 我们插入MySQL ...

  7. 通过一条语句的执行,深入理解innoDB的底层架构

    MySQL最常用的存储引擎是innodb,我们今天就借助一条更新语句的执行,了解下innodb具体是如何处理的,深入理解下它的架构. 假设更新语句是这样的: update user set name ...

  8. linux unlink 与 rm区别_从 lsof 开始,深入理解 Linux 虚拟文件系统

    背景 有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间.1.执行df命令查看磁盘使用情况,发现磁盘已经满了. -bash-4.2$ df ...

  9. 理解linux虚拟文件系统VFS - 概述

    当前,除了Linux标准的文件系统Ext2/Ext3/Ext4外,还有很多种文件系统,比如reiserfs, xfs, Windows的vfat NTFS,网络文件系统nfs 以及flash 文件系统 ...

最新文章

  1. BERT-of-Theseus:基于模块替换的模型压缩方法
  2. HttpURLConnection根据URL下载图片
  3. MySQL 汉字转拼音
  4. 老程序员提给后浪程序员的职涯建议
  5. c++类的嵌套(1)
  6. Q95:纹理映射(Texture Mapping)(3)——Triangle Meshes
  7. Java开发工程师如何做好职业规划和成长路线
  8. AudioToolbox之AudioQueue.h(二)Creating and Disposing of Audio Queues
  9. 计算机类银行招聘考试考什么科目,计算机专业参加银行招聘考试要考哪些科目,除了行..._银行招聘考试_帮考网...
  10. 2021-2027全球及中国气提系统行业研究及十四五规划分析报告
  11. Android 手机获取Mac地址的方法
  12. 十大管理概念(背诵)
  13. 如何统计自己写的代码量
  14. 随笔--初到青岛,爱意油然而生
  15. Unity资源加载简析(一)Resources
  16. css中的position和float属性
  17. 基于5G森林防火无线监控解决方案
  18. 华工计算机研究生课程表,11级华工研究生课程表.doc
  19. matlab算法改进,pso算法改进含MATLAB代码
  20. 万物互联机遇 物联网步入迅速发展期

热门文章

  1. Linux 环境 C语言 操作MySql 的接口范例
  2. 【Linux系统编程学习】C库IO函数与系统IO函数的关系
  3. eventfd(三)
  4. Linux本地yum源配置以及使用yum源安装各种应用程序
  5. oppoJava面试!传智播客java基础案例教程
  6. 【微信小程序】使用Hystrix的插件机制
  7. eclipse maven 构建简单springmvc项目
  8. 洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm
  9. 从 MVC 到前后端分离
  10. struts 2读书笔记-----struts2的开发流程