mysql dba系统学习(12)mysql的数据文件

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

mysql的数据文件


一,系统参数datadir

在MySQL 中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以数据库名字命名的文件夹,用来存放该数据库中各种表数据文件 datadir指定的目录是数据库目录的上级目录,一般的创建数据库的时候会创建两个数据库mysql和test,如果再创建一个数据库的话就会多出一个对应的数据库文件夹

mysql> show variables like "%datadir%";

+---------------+-----------------------+

| Variable_name | Value                 |

+---------------+-----------------------+

| datadir       | /usr/local/mysql/var/ |

+---------------+-----------------------

mysql> system ls  /usr/local/mysql/var/

ibdata1      ib_logfile1  test     test4.pid test4.wolf.org.pid

ib_logfile0  mysql  test4.log  test4.wolf.org.err

mysql> create database chen;

Query OK, 1 row affected (0.03 sec)


mysql> system ls  /usr/local/mysql/var/

chen ib_logfile0  mysql  test4.logtest4.wolf.org.err

ibdata1  ib_logfile1  test   test4.pidtest4.wolf.org.pid


二,MyISAM 引擎的数据文件

我们来在chen数据库里面创建一个表试试看,会产什么变化!!

mysql> use chen;

Database changed

mysql> create table tt(id int ,name varchar(20)) engine=myisam;

Query OK, 0 rows affected (0.15 sec)


结果生成如下文件

[root@test4 ~]# cd /usr/local/mysql/var/chen/

[root@test4 chen]# ll  -h

total 20K

-rw-rw----. 1 mysql mysql   61 Sep  4 20:04 db.opt

-rw-rw----. 1 mysql mysql 8.4K Sep  4 20:22 tt.frm

-rw-rw----. 1 mysql mysql    0 Sep  4 20:22 tt.MYD

-rw-rw----. 1 mysql mysql 1.0K Sep  4 20:22 tt.MYI


“.frm”文件        与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文件。所有的“.frm”文件都存放在所属数据库的文件夹下面。而且大小也不会变化


“.MYD”文件        “.MYD”文件是MyISAM 存储引擎专用,存放MyISAM 表的数据。每一个MyISAM 表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,和“.frm”文件在一起。


“.MYI”文件        “.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说,可以被cache 的内容主要就是来源于“.MYI”文件中。每一个MyISAM表对应一个“.MYI”文件,存放于位置和“.frm”以及“.MYD”一样。


三,innodb 引擎的数据文件

            innodb_file_per_table参数的作用是决定innodb引擎的数据是不是每个表一个文件,也就是说是不是每个表独享一个表文件。off表示的是共享,on表示的是独享

mysql> show variables like "%per_table%";

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | OFF   |

+-----------------------+-------+

1 row in set (0.01 sec)



“.ibd”文件和ibdata 文件

     这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb 的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。 独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件,文件存放在和MyISAM数据相同的位置。


       如果选用共享存储表空间来存放数据,则会使用ibdata 文件来存放,所有表共同使用一个(或者多个,可自行配置)ibdata 文件。ibdata 文件可以通过innodb_data_home_dir 和innodb_data_file_path两个参数共同配置组成, innodb_data_home_dir 配置数据存放的总目录, 而innodb_data_file_path 配置每一个文件的名称。当然,也可以不配innodb_data_home_dir而直接在innodb_data_file_path参数配置的时候使用绝对路径来完成配置。

mysql> show variables like "%innodb_data%";

+-----------------------+------------------------+

| Variable_name         | Value                  |

+-----------------------+------------------------+

| innodb_data_file_path | ibdata1:10M:autoextend |

| innodb_data_home_dir  | /usr/local/mysql/var   |

+-----------------------+------------------------+

       innodb_data_file_path中可以一次配置多个ibdata文件。文件可以是指定大小,也可以是自动扩展的,但是Innodb 限制了仅仅只有最后一个ibdata 文件能够配置成自动扩展类型。当我们需要添加新的ibdata 文件的时候,只能添加在innodb_data_file_path配置的最后,而且必须重启MySQL 才能完成ibdata 的添加工作。

  我们把参数innodb_file_per_table设置成on试试有什么变化,那么这个时候就是一个表一个数据文件了。。。

mysql> show variables like "%per_table%";

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | ON    |

+-----------------------+-------+

mysql> use chen

Database changed

mysql> create table cc(id int ,name varchar(20)) engine=innodb;

Query OK, 0 rows affected (0.14 sec)


mysql> insert into cc values(1,'rdcgggiiii');

Query OK, 1 row affected (0.08 sec)


mysql> insert into cc  select * from  cc;


Query OK, 1 row affected (0.62 sec)

Records: 1  Duplicates: 0  Warnings: 0



生成的.idb数据文件

[root@test4 chen]# pwd

/usr/local/mysql/var/chen

[root@test4 chen]# ls

cc.frm  cc.ibd  db.opt  ss.frm  tt.frm  tt.MYD  tt.MYI


本文转自陈仲阳0 51CTO博客,原文链接:http://blog.51cto.com/wolfword/1288777
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
缓存 NoSQL 关系型数据库
13- Redis和Mysql如何保证数据⼀致?
该内容讨论了保证Redis和MySQL数据一致性的几种策略。首先提到的两种方法存在不一致风险:先更新MySQL再更新Redis,或先删Redis再更新MySQL。第三种方案是通过MQ异步同步以达到最终一致性,适用于一致性要求较高的场景。项目中根据不同业务需求选择不同方案,如对一致性要求不高的情况不做处理,时效性数据设置过期时间,高一致性需求则使用MQ确保同步,最严格的情况可能涉及分布式事务(如Seata的TCC模式)。
23 6
|
10天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
10天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
10天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
轻松入门MySQL:优化进销存管理,掌握MySQL索引,提升系统效率(11)
|
13天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
22 1
|
5天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
10天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
4天前
|
监控 安全 关系型数据库
基于vue2 + element +mysql医院不良事件上报系统源码
不良事件管理系统从时间上报、PDCA分析、事件整改、评估效果实行闭环管理和分析,满足医院追根溯源,全流程闭环管理,提高不良事件上报率,减少同类不良事件发生,提高医疗安全。通过报告不良事件,及时发现潜在的不安全因素
16 1
|
分布式计算 关系型数据库 MySQL
E-Mapreduce如何处理RDS的数据
目前网站的一些业务数据存在了数据库中,这些数据往往需要做进一步的分析,如:需要跟一些日志数据关联分析,或者需要进行一些如机器学习的分析。在阿里云上,目前E-Mapreduce可以满足这类进一步分析的需求。
4933 0
|
5天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)