首页 > 数据库 >MySQLINNODB表空间分类简单介绍

MySQLINNODB表空间分类简单介绍

时间:2023-06-30 19:22:13浏览次数:49  
标签:MySQLINNODB root 分类 ibd innodb 简单 空间 table data

 

MySQLINNODB表空间分类简单介绍

 

从功能上看

INNODB表空间共以下几种:

 

从共享与否角度看

上边提到的五种表空间可以这么归类。

  • 共享表空间
  • 独立表空间

官档中有明确提到“共享表空间”这个说法:

https://dev.mysql.com/doc/refman/8.0/en/general-tablespaces.html

或者比如将分区表更改为共享表空间则会提示报错:

(root@localhost 16:57:48) [zkm](10)> alter table zkm.employees tablespace tbs01;
ERROR 1478 (HY000): InnoDB : A partitioned table is not allowed in a shared tablespace.

 

至于独立表空间,暂时没找到官档的说法,是网络上大家的说法,相对于共享表空间来说很准确。

 

共享角度和功能两者的关系

共享表空间包含(官档来源):防偷防爬

  • 系统表空间
  • 通用表空间

https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html

 

 

而独立表空间:

  • File-Per-Table表空间

 

简单说下系统表空间、File-Per-Table表空间、通用表空间的创建

系统表空间:

通过这两个参数控制:innodb_data_file_pathinnodb_data_home_dir

(root@localhost 18:08:11) [information_schema](13)> show variables like 'innodb_data%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.00 sec)

 

innodb_data_file_path是控制系统表空间文件的数量,绝对路径文件位置,名称,大小,是否自动扩展,最大值等,eg:innodb_data_file_path=ibdata1:76M;ibdata2:64M;/sys_tbs2/ibdata3:12M;ibdata4:12M:autoextend:max:256M

innodb_data_home_dir是控制系统表空间文件位置的参数,默认值为datadir的值。

(root@localhost 18:43:56) [information_schema](8)> select * from information_schema.INNODB_TABLESPACES_BRIEF where name='innodb_system';
+--------------+---------------+-------------------+--------------+------------+
| SPACE        | NAME          | PATH              | FLAG         | SPACE_TYPE |
+--------------+---------------+-------------------+--------------+------------+
| 0x30         | innodb_system | ibdata1           | 0x3138343332 | System     |
| 0x30         | innodb_system | /sys_tbs/ibdata2  | 0x3138343332 | System     |
| 0x30         | innodb_system | ibdata3           | 0x3138343332 | System     |
| 0x30         | innodb_system | ibdata2           | 0x3138343332 | System     |
| 0x30         | innodb_system | /sys_tbs2/ibdata3 | 0x3138343332 | System     |
| 0x30         | innodb_system | ibdata4           | 0x3138343332 | System     |
+--------------+---------------+-------------------+--------------+------------+
6 rows in set (0.00 sec)

 

 

File-Per-Table表空间:

开启File-Per-Table表空间属性,即启动innodb_file_per_table变量(默认启用)的情况下,创建表的时候自动在变量datadir下创建库名文件夹/表名.ibd

(root@localhost 18:47:21) [information_schema](8)> select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
|                       1 |
+-------------------------+
1 row in set (0.00 sec)
(root@localhost 18:49:01) [information_schema](8)> create database zkm;
Query OK, 1 row affected (0.00 sec)

(root@localhost 18:49:04) [information_schema](8)> CREATE TABLE zkm.t1 (c1 INT PRIMARY KEY) engine=innodb;
Query OK, 0 rows affected (0.02 sec)

[root@dev-app80 data]# ll /data/mysql3306/data/zkm/t1.ibd
-rw-r----- 1 mysql mysql 114688 Jun 30 18:49 /data/mysql3306/data/zkm/t1.ibd

 

 

 

也可以不需要开启File-Per-Table表空间属性,但是要结合create table ... tablespace = innodb_file_per_table(可以结合data directory子句将t2.ibd放到其他位置,详见MySQL如何创建外部表)来创建。

(root@localhost 18:51:31) [information_schema](8)> set global innodb_file_per_table = off;
Query OK, 0 rows affected (0.00 sec)

(root@localhost 18:51:41) [information_schema](8)> select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set (0.00 sec)

(root@localhost 18:51:44) [information_schema](8)> CREATE TABLE zkm.t2 (c1 INT PRIMARY KEY) tablespace=innodb_file_per_table engine=innodb;
Query OK, 0 rows affected (0.01 sec)

[root@dev-app80 data]# ll /data/mysql3306/data/zkm/
total 224
-rw-r----- 1 mysql mysql 114688 Jun 30 18:49 t1.ibd
-rw-r----- 1 mysql mysql 114688 Jun 30 18:52 t2.ibd

 

根据观察到的规律,File-Per-Table表空间的名称都带有'/',并且*.ibd都是伴随着表创建产生的。

(root@localhost 18:55:22) [(none)](9)> select * from information_schema.INNODB_TABLESPACES_BRIEF where name like '%/%';
+--------------+----------------+----------------------+--------------+------------+
| SPACE        | NAME           | PATH                 | FLAG         | SPACE_TYPE |
+--------------+----------------+----------------------+--------------+------------+
| 0x31         | sys/sys_config | ./sys/sys_config.ibd | 0x3136343137 | Single     |
| 0x3334       | zkm/t1         | ./zkm/t1.ibd         | 0x3136343137 | Single     |
| 0x3335       | zkm/t2         | ./zkm/t2.ibd         | 0x3136343137 | Single     |
+--------------+----------------+----------------------+--------------+------------+
3 rows in set (0.00 sec)

 

 

如果是外部表创建,要结合innodb_directories,不然无法将表创建到变量datadir意外的目录。

 

通用表空间

设置innodb_directories,可以将通用表空间创建到innodb_directories所指定的目录下,注意设置innodb_directories需要重启生效。

(root@localhost 19:03:46) [(none)](9)> create tablespace common_tbs add datafile '/mysqldata_tmp/common_tbs01.ibd' engine=innodb;
Query OK, 0 rows affected (0.01 sec)

[root@dev-app80 mysqldata_tmp]# ll /mysqldata_tmp/
total 112
-rw-r----- 1 mysql mysql 114688 Jun 30 19:04 common_tbs01.ibd

 

表空间名称就是你指定时候的名称。

(root@localhost 19:05:34) [(none)](9)> select * from information_schema.INNODB_TABLESPACES_BRIEF WHERE name='common_tbs';
+--------------+------------+---------------------------------+--------------+------------+
| SPACE        | NAME       | PATH                            | FLAG         | SPACE_TYPE |
+--------------+------------+---------------------------------+--------------+------------+
| 0x3336       | common_tbs | /mysqldata_tmp/common_tbs01.ibd | 0x3138343332 | General    |
+--------------+------------+---------------------------------+--------------+------------+
1 row in set (0.00 sec)

PS:如果将一个普通的表从独立表空间变为共享表空间,则独立表空间对应的.ibd文件会被删除回收。

如果将一个普通的表从共享表空间变为另外一个共享表空间,则原来的共享表空间对应的.ibd文件不会有任何变化。

alter table t tablespace new_tablespace;

标签:MySQLINNODB,root,分类,ibd,innodb,简单,空间,table,data
From: https://www.cnblogs.com/PiscesCanon/p/17517656.html

相关文章

  • 一个简单棋盘覆盖定理的证明
    能够用\(1\timesl\)的矩形覆盖\(n\timesm\)棋盘的充要条件是\(l\midn\lorl\midm\)。充分性显然,考虑证明必要性。为了方便,我们将行和列记为\(0\simn-1\)和\(0\simm-1\)。考虑设\((i,j)\)的权值为\(\omega_{l}^{i+j}\),一个\(1\timesl\)的矩形覆盖的区域显然......
  • 只要四步就可以拍悬浮的相片 太简单了
         第一步:找块空地。 第二步:在空地上,弄一小块水渍。 第三步:站在水渍旁边。 第四步:拍照作者:古道轻风......
  • gdb简单使用
    gdb常见指令1.编译假设文件名为hello.cgcc-ggdb3-Wall-ohellohello.c调试,需要在编译时加上选项-ggdb3选项-Wall:可以提示错误信息2.进入gdbgdbhello3.打断点,以源码内行号为单位打断点: break21在第21行设置断点 breakmain在main函数处设置断点 break......
  • spingBoot简单提供接口的方法----Get篇
    一、controller层写路由地址和service接口方法/***查询数量路由地址aaa/bbb/ccc/getDone*/@PreAuthorize("@ss.hasPermi('aaa:bbb:ccc:list')")@GetMapping("/getDone")publicActionResultgetDone(MeterPaginationmeterPagination){List<HashMa......
  • SpringBoot elasticsearch 简单使用
    ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行封装,提供了RESTAPI的操作接口。ElasticSearch作为一个高度可拓展的开源全文搜索和分析引擎,可用于快速地对大数据进行存储,搜索和分析。ElasticSearch主要特点:分布式、高可用、异步写入、多API、面向文档。Elastic......
  • 项目的初始化和服务器的简单搭建
    ##项目初始化新建文件夹,命名为`students-system`(根据自己的情况命名),注意这里的命名不得为中文或其他特殊字符```shellnpminit-y(初始化命令)```##安装包```shellnpmijqueryexpressexpress-art-template(安装命令)```##新建文件夹新建public,views文件夹,public下新建img,js......
  • python 队列简单实现
    1classQueuryExcept(Exception):...23classLinkNode:4def__init__(self,value:int,next=None):5self.value:int=value6self.next:LinkNode=next78def__repr__(self)->str:9li=[se......
  • Java 网络爬虫,就是这么的简单
    是Java网络爬虫系列文章的第一篇,如果你还不知道Java网络爬虫系列文章,请参看学Java网络爬虫,需要哪些基础知识。第一篇是关于Java网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题和详情页为例,需要提取的内容如下图所示: 我们需要提取图中圈出来的文字及其对......
  • Halcon - 深度学习 - 目标分类
    这是一个例子,通过读取桃子和梨的图片集来进行模型训练,得到一个可以识别桃子或是梨的深度学习识别器。**********************************************Halcon-深度学习-分类测试*这是一个例子,通过读取桃子和梨的图片集来进行模型训练,*得到一个可以识别桃子或是梨的深度学......
  • 浅谈PCBA板机械加工分类
    印制板的机械加工主要应用于印制板坯料的下料(俗称开料)、孔加工和外形加工,是印制板整个工艺程序中的重要步骤。由于印制板的孔和外形加工质量都直接影响印制板的机械装配性能和电气连接性能,尤其是印制板上各种用途的孔(元件安装孔、导通孔、安装孔、定位孔、检测孔等)加工质量还会影......