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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

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
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
31 2
|
8天前
|
SQL 关系型数据库 MySQL
MySQL如何排查和删除重复数据
该文章介绍了在MySQL中如何排查和删除重复数据的方法,包括通过组合字段生成唯一标识符以及使用子查询和聚合函数来定位并删除重复记录的具体步骤。
26 2
|
3天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
30 11
|
1天前
|
关系型数据库 MySQL 数据库
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
MySQL的语法涵盖了数据定义、数据操作、数据查询和数据控制等多个方面
13 5
|
3天前
|
数据采集 中间件 关系型数据库
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
Mac系统通过brew安装mysql5.7后,启动报错的解决办法
12 2
|
9天前
|
关系型数据库 MySQL 数据库
Python MySQL查询返回字典类型数据的方法
通过使用 `mysql-connector-python`库并选择 `MySQLCursorDict`作为游标类型,您可以轻松地将MySQL查询结果以字典类型返回。这种方式提高了代码的可读性,使得数据操作更加直观和方便。上述步骤和示例代码展示了如何实现这一功能,希望对您的项目开发有所帮助。
26 4
|
5天前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
11 0
|
6天前
|
存储 SQL 关系型数据库
mysql删除 所有数据
mysql删除 所有数据
|
16天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
18天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
158 11
下一篇
无影云桌面