Mysql和文件系统的关联详情

目录
  • 前言
  • Mysql数据目录
  • 数据目录相关结构
    • 数据库存储结构
    • 表结构存储
    • 表数据存储
    • InnoDB存储引擎表数据存储
    • MyISAM存储引擎表数据存储
    • 特殊视图存储

前言

在Linux中采用文件系统管理磁盘,而Mysql常用的存储引擎如InnoDB、MyISAM采用的是文件存储,自然和文件系统挂钩,那么Mysql都有哪些地方用到了文件系统呢?下面聊聊

Mysql数据目录

Mysql系统启动文件(默认my.cnf)中可能会指定Mysql的一个全局系统变量datadir,这个变量可以指定Mysql的数据存储目录,

如下:

或者采用查询变量的形式获取(下面所有演示截图都是从这个目录出发)

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

数据目录相关结构

数据库存储结构

每创建完一个数据库会在预定义的datadir路径下创建一个以数据库名同名的文件夹

mysql> create database test_data;
Query OK, 1 row affected (0.00 sec)

创建完test_data文件夹,会在该文件夹下创建一个db.opt的文件,该文件用于存放数据库的属性如字符集和比较规则。

有一点我们需要注意系统自带的数据库有四个分别是mysql(存储Mysql用户权限等信息)、information_schema(其它数据库描述信息)、performance_schema(存储Mysql运行时状态等)、sys(服务器性能视图),其中除information_schema外都会创建一个文件夹。

表结构存储

如给上述创建的test_data数据库新建一个表

CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

那么Mysql会在数据库同名文件夹也就是test_data上新建一个同表名的文件test_table.frm,这个文件用于描述表的字段,索引、约束等等

表数据存储

表数据存储不同的存储引擎,存储文件是不同的,以常用InnoDB和MyISAM举例。

InnoDB存储引擎表数据存储

InnoDB存储引擎都是以页为单位管理存储空间的,一个数据页的大小为16k,而InnoDB为了方便管理引入表空间的概念,一个表空间中可能包含多个数据页,当然表空间又分为几种如下。

系统表空间

从Mysql版本5.5.7到5.6.6之间的版本默认将表数据放入系统表空间中,在默认情况下数据目录的位置会自动生成一个文件名为ibdata1的文件,该文件大小为12M,

如下;

这个文件的大小并不是固定的,可以自增长,这意味着该文件存储不下时可以自动扩充大小。

独立表空间

在Mysql版本从5.6.6后不再存储到系统表空间,而是存储到独立表空间,独立意味着表与表之间的数据独立开来,Mysql会为每一个表建立一个独立的空间,有多少个表就有多少个独立空间,所以当我们执行建表语句

-- 默认InnoDB存储引擎
CREATE TABLE test_table (
  name varchar(100) DEFAULT NULL
) ENGINE=InnoDB

会在当前数据库同名的目录下新建一个同表名的idb文件:

至于用户想选择系统表空间还是独立表空间可以由用户自己决定,通过修改系统变量innodb_file_per_table就可以实现,为0表示使用系统表空间,为1表示使用独立表空间,这里需要注意的是修改该系统参数只对新建表生效,至于修改系统参数之前的表需要手动修改。

MyISAM存储引擎表数据存储

MyISAM的存储引擎和InnoDB存储引擎在文件系统上的最大区别就是MyISAM将索引和数据文件分开,InnoDB强调的是索引既数据,就是因为这样所以MyISAM存储引擎的表由三个文件描述

  • 表名.frm:描述表结构,索引,约束等。
  • 表名.MYD:存储表数据。
  • 表名.MYI:存储表索引。

如下创建测试表:

CREATE TABLE `test_table_myisam` (
  `name` varchar(100) DEFAULT NULL
) ENGINE=MyISAM

特殊视图存储

create view view_test as select * from test_table;

因为视图本质就是虚拟表,仅仅是查询语句的别名,存储时不保存视图的数据,仅仅只保存视图的表结构,所以创建视图仅仅会创建一个与视图同名的frm文件。

到此这篇关于Mysql和文件系统的关联详情的文章就介绍到这了,更多相关Mysql文件系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL性能全面优化方法参考,从CPU,文件系统选择到mysql.cnf参数优化

    本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我们 1.硬件层相关优化 1.1.CPU相关 在服务器的BIOS设置中,可调整下面的几个配置,目的是发挥CPU最大性能,或者避免经典的NUMA问题: 1.选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能,跑

  • 在Windows系统上使用压缩归档文件安装MySQL的步骤

    最近需要做个小小的验证实验,需要安装MySQL,网上一搜发现教程繁多,bug也多,所以直接把官网的流程翻译过来,注意是压缩文件,不是安装版的,解压直接能用的,下面直接把流程贴过来: 使用压缩文档安装在Windows上安装MySQL 1.将文件提取到安装目录 1)管理员权限     2)选择安装位置,默认C:\mysql,通过配置文件制定安装位置     3)使用软件解压缩,如果默认生成一个主目录,请把主目录中的子文件放到你指定的安装位置上 2.创建配置文件 A.为何使用配置文件 1)安装和数据目

  • 浅谈mysql 系统用户最大文件打开数限制

    纸上得来终觉浅,绝知此事多宕机...记录一下自己很蠢的一次故障处理过程. 上周的时候,一个刚上线的系统又开始反映登不上了,因为最近这个系统也老是出现这个问题,开发也一直在找问题中,所以也没太在意.于是登上操作系统,mysql -uroot -p登录数据库,然后就一直没反应,登不上... 交代一下,mysql是装在mysql用户下的,装的时候虽然对数据库参数有进行调优,但是操作系统层面没做调整,所以mysql用户的最大文件打开数限制为默认的1024,用ulimit -n可以查询.然后我在用mysq

  • Mysql和文件系统的关联详情

    目录 前言 Mysql数据目录 数据目录相关结构 数据库存储结构 表结构存储 表数据存储 InnoDB存储引擎表数据存储 MyISAM存储引擎表数据存储 特殊视图存储 前言 在Linux中采用文件系统管理磁盘,而Mysql常用的存储引擎如InnoDB.MyISAM采用的是文件存储,自然和文件系统挂钩,那么Mysql都有哪些地方用到了文件系统呢?下面聊聊 Mysql数据目录 Mysql系统启动文件(默认my.cnf)中可能会指定Mysql的一个全局系统变量datadir,这个变量可以指定Mysql

  • 图文详解MySQL中两表关联的连接表如何创建索引

    本文介绍了MySQL中两表关联的连接表是如何创建索引的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 问题介绍 创建数据库的索引,可以选择单列索引,也可以选择创建组合索引. 遇到如下这种情况,用户表(user)与部门表(dept)通过部门用户关联表(deptuser)连接起来,如下图所示: 表间关系 问题就是,在这个关联表中该如何建立索引呢? 针对该表,有如下四种选择: 针对于user_uuid建立单列索引idx_user 针对于user_dept建立单列索引idx_dept 建立组合

  • mysql实现多表关联统计(子查询统计)示例

    本文实例讲述了mysql实现多表关联统计的方法.分享给大家供大家参考,具体如下: 需求: 统计每本书打赏金额,不同时间的充值数据统计,消费统计, 设计四个表,book 书本表,orders 订单表  reward_log打赏表   consume_log 消费表 ,通过book_id与book表关联, 问题: 当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_

  • MySQL时间类型和模式详情

    目录 1.MySQL时间类型 2.查看时区 3.非法时间值 4.严格模式 5.case汇总 当我在MySQL数据库中尝试插入一条带有时间戳的数据时报错: mysql> insert into alarm_service values (6, '1970-01-01 08:00:00'); ERROR 1292 (22007): Incorrect datetime value: '1970-01-01 08:00:00' for column 'time' at row 1 # 查看表结构 my

  • mysql的数据压缩性能对比详情

    目录 1. 测试环境 1.1 软硬件 1.2 表结构 2. 测试目的 2.1 压缩空间对比 2.2 查询性能对比 3. 测试工具 3.1 mysqlslap 3.2 测试query 4.测试结论 数据魔方需要的数据,一旦写入就很少或者根本不会更新.这种数据非常适合压缩以降低磁盘占用.MySQL本身提供了两种压缩方式――archive引擎以及针对MyISAM引擎的myisampack方式.今天对这两种方式分别进行了测试,对比了二者在磁盘占用以及查询性能方面各自的优劣.至于为什么做这个,你们应该懂的

  • Mysql MVCC多版本并发控制详情

    目录 1.MVCC 2.当前读 3.快照读(提高数据库的并发查询能力) 4.当前读.快照读.MVCC关系 5.MVCC实现原理 6.MVCC核心思想 1.MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制.MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存. MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读写冲突,做到即使有>读写冲突时,也能做

  • Mysql InnoDB 的内存结构详情

    目录 1 前言 2 InnoDB 存储引擎结构 2.1 InnoDB表存储引擎文件 2.2 InnoDB 预读机制 2.3 InnoDB 特性 2.3.1 插入缓存 2.3.2 二次写 (double write) 2.3.3 自适应hash索引 2.3.4 异步IO 2.3.5 刷新邻接页 3 sql 执行的逻辑 3.1 sql 执行 3.2 FreeList.LRU List 和 Flush List 1 前言 我们都熟悉mysql数据库服务架构,也清楚 sql 的执行顺序,mysql的数据

  • MySQL事务的隔离级别详情

    目录 一.隔离级别的概念 二.测试TRANSACTION_READ_UNCOMMITTED隔离级别 三.测试TRANSACTION_READ_COMMITTED隔离级别 四.测试TRANSACTION_REPEATABLE_READ隔离级别 五.测试TRANSACTION_SERIALIZABLE隔离级别 一.隔离级别的概念 为什么要考虑隔离级别? 因为事务要并发执行,而并发执行可能会出现一些问题:脏读.不可重复读和虚读,有的是允许出现的,有的不允许出现,对于这种不同程度上的出现或不出现的并发控

  • mysql 索引使用及优化详情

    目录 前言 mysql索引原理 mysql索引分类 索引创建语法 1.创建索引 2.查看索引 3.删除索引 4.为 username和password创建联合索引 5.给user表添加一个info的字段,并为这个字段添加全文索引 已经存在的表创建.删除索引等 1.使用ALTER TABLE语句创建索引 2.使用ALTER TABLE语句删除索引 常用的索引设计原则 索引失效情况总结 尽量使用覆盖索引 前言 索引对有一定开发经验的同学来说并不陌生,合理使用索引,能大大提升sql查询的性能,可以这么

  • MySQL数据权限的实现详情

    目录 数据权限模型 实现效果 数据模型 数据权限表结构 授权维度表 具体授权维度表(产品线) 组件路由表 角色表 角色组件绑定表 角色组件授权规则表(核心) 实现过程 代码实现 自定义数据权限注解 定义数据权限处理切面 数据权限工具类 查询组件规则 Controller调用 构建数据权限SQL Dao层实现 小结 数据权限模型 上篇文章的数据模型是基于传统的RBAC模型来设计的,由于我们这里的应用场景不一样,所以这里的数据权限模型并没有严格按照上篇文章的方案来设计,但是万变不离其宗,核心原理还是

随机推荐