深入理解InnoDB(5)-文件系统

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

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

2.MySQL数据目录

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

2.1 查找MySQL数据目录的位置

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

mysql> SHOW VARIABLES LIKE 'datadir';

image.png

2.2 数据目录的结构

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

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

image.png

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的扩展名而已

image.png

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会默认存在几个系统数据库

image.png

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

image.png

  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的运行情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim捐赠_#PayItBackwards-一位freeCodeCamp毕业生如何向事业捐赠10,000美元

vim捐赠On Monday my phone suddenly started buzzing. Shawn Wang, AKA Swyx, had just tweeted about a donation hed made to freeCodeCamp.org.星期一,我的电话突然开始嗡嗡作响。 Awn Swyx的Shawn Wang刚刚在推特上发布了他对freeCodeCamp.org的捐款。 I glan…

Digital River拉来Netconcepts站台 亚太营销服务升级

它是大洋彼岸的一家网络软件下载、分销商,很多重量级的软件行业领军企业都是其客户,它一直低调摸索亚太营销的路子,在今年九月份,它一改常态,高调宣布入华,三个月后,它带来了最新消息&#xff1…

按下按钮_按下

按下按钮Updated with the latest data: 23/8/2020更新最新数据:23/8/2020 As restrictions are lifted for Laois and Offaly, difficult times are set to continue for the people of Kildare, at least for another couple of weeks, as they continue to fight…

windows中怎么添加定时任务

linux中有crontab定时任务,很方便 其实windows也有类似的 需求:定时执行python脚本 1、Windows键R,调出此窗口,输入compmgmt.msc 2、 转载于:https://www.cnblogs.com/gcgc/p/11594467.html

css设置黑体宋体等(转)

代码如下: .selector{ font-family:"Microsoft YaHei",微软雅黑,"MicrosoftJhengHei",华文细黑,STHeiti,MingLiu } 说明: 加上中文名“微软雅黑”是为了兼容opera。 MicrosoftJhengHei为微软正黑体,STHeiti为华文黑体,Mi…

重学TCP协议(7) Timestamps 选项

1.Timestamps 选项的组成部分 时间戳选项占10个字节 kind(1字节) + length(1字节) info (8字节),其中kind8,length10,info由timestamp(TS value)和timestamp echo(TS Echo Reply)两…

sudoku代码_首席执行官可以编码吗? 在星期六晚上坐在酒吧时,从头开始观看Netlify首席执行官的Sudoku应用程序代码

sudoku代码Netlify CEO Matt Biilmann live-codes a Sudoku app using Netlify in this tutorial video. Matt shows how simple and quick it can be to create a working app using the JAMstack.在本教程视频中,Netlify CEO Matt Biilmann使用Netlify对Sudoku应用…

c++ 时间序列工具包_我的时间序列工具包

c 时间序列工具包When it comes to time series forecasting, I’m a great believer that the simpler the model, the better.关于时间序列预测,我坚信模型越简单越好。 However, not all time series are created equal. Some time series have a strongly defi…

bash 的相关配置

bash 参数自动补全 请安装 bash-completion bash 提示符 说明:参考文档 1. 简洁风格 if [[ ${EUID} 0 ]] ; then PS1\[\033[01;32m\][\[\033[01;35m\]\u\[\033[01;37m\] \w\[\033[01;32m\]]\$\[\033[00m\] else PS1\[\033[01;32m\][\u\[\033[01;37m\] \w\[\033[01;…

LINUX系统安装和管理

目录 一.应用程序 对比应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包装类型 二.RPM软件包管理 1.RPM是什么? 2.RPM命令的格式 查看已安装的软件包格式 查看未安装的软件包 3.RPM安装包从哪里来? 4.挂载的定义 挂载命令moun…

sql基础教程亚马逊_针对Amazon,Apple,Google的常见SQL面试问题

sql基础教程亚马逊SQL is used in a wide variety of programming jobs. Its important to be familiar with SQL if you are going to be interviewing soon for a software position. This is especially true if you are going to interview at a top tech company such as …

leetcode 1720. 解码异或后的数组(位运算)

未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如,arr [1,0,2,1] 经编码后得到 encoded [1,2,3] 。 给你编码后的数组 encoded 和原数组 arr 的第一个元…

adobe 书签怎么设置_让我们设置一些规则…没有Adobe Analytics处理规则

adobe 书签怎么设置Originally published at Analyst Admin.最初发布于Analyst Admin 。 In my experience working with Adobe Analytics, I’ve found that Processing Rules help in some cases, but oftentimes they create more work. I try to avoid using Processing R…

详解linux下安装python3环境

1、下载python3.5源码包首先去python官网下载python3的源码包,网址:https://www.python.org/ 进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code,表示源码包,这里选择最新版本3.5.2&am…

详解spl_autoload_register()函数

http://blog.csdn.net/panpan639944806/article/details/23192267 转载于:https://www.cnblogs.com/maidongdong/p/7647163.html

上海区块链会议演讲ppt_所以您想参加会议演讲吗? 这是我的建议。

上海区块链会议演讲pptYou’ve attended a few conferences, watched a lot of presentations, and decided it’s time to give a talk of your own! As someone who has both given talks at conferences, and sat on the proposal review board for others, I’m here to te…

重学TCP协议(8) TCP的11种状态

TCP的11种状态 为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 &…

肯尼亚第三方支付_肯尼亚的COVID-19病例正在Swift增加,我们不知道为什么。

肯尼亚第三方支付COVID-19 cases in Kenya are accelerating rapidly. New cases have increased 300% month-over-month since April of this year while global and regional media have reported on the economic toll of stringent lock-down measures and heavy-handed go…

JVM命令

1、jps 查看所有虚拟机进程 -v 虚拟机启动时JVM参数 -l 执行主类全名 2、jstat 显示本地或远程类装载、内存、垃圾回收、JIT编译等运行数据(性能问题定位工具首选) 格式:jstat [-option] vmid ms count (示例&a…

Java 集合 List Arrays.asList

2019独角兽企业重金招聘Python工程师标准>>> 参考链接:阿里巴巴Java开发手册终极版v1.3.0 【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedO…