首页 > 其他分享 >16. InnoDB-表空间

16. InnoDB-表空间

时间:2024-03-26 23:11:25浏览次数:27  
标签:Mar 16 -- undo InnoDB UNDO mysql 空间

InnoDB的特点

  • Fully ACID (InnoDB默认的Repeat Read隔离级别就支持)
  • Row-level Locking(支持行锁)
  • Multi-version concurrency control(MVCC)(支持多版本并发控制)
  • Foreign key support(支持外键)
  • Automatic deadlock detection(死锁自动检测)
  • High performance、High scalability、High availability(高性能,高扩展,高可用)

 

InnoDB存储引擎的文件

概述

InnoDB的文件主要分为两个部分,一个是表空间文件,一个是重做日志文件。

  • 表空间文件
    • 独立表空间文件
    • 全局表空间文件
    • undo表空间文件(from MySQL 5.6)
  • 重做日志文件
    • 物理逻辑日志
    • 没有Oracle的归档重做日志

 

InnoDB表空间

  • 表空间的概念
    • 表空间是一个逻辑存储的概念
    • 表空间可以由多个文件组成
    • 支持裸设备(可以直接使用O_DIRECT方式绕过缓存,直接写入磁盘)
      • 支持裸设备指的是不需要在硬盘上分区安装文件系统。

 

表空间的分类

  • 系统表空间 (最早只有系统表空间)
    • 存储元数据信息
    • 存储Change Buffer信息
    • 存储Undo信息
    • 甚至一开始 所有的表和索引的信息都是存储在系统表空间中
      • 随后InnoDB对其做了改进,可以使用独立的表空间
  • 独立表空间
    • innodb_file_per_table=1 (开启支持每个表一个独立的表空间)
    • 每张用户表对应一个独立的 ibd文件
    • 分区表可以对应多个ibd文件
  • Undo表空间
    • MySQL5.6版本支持独立的Undo表空间
    • innodb_undo_tablespaces,控制生成的UNDO表空间的数量,默认2个,在8.0对该参数做了废弃,但并未提供其他参数控制UNDO数量,当前依旧可以使用该参数做UNDO表空间数量配置,通常建议配置为3(手工收缩UNDO时需要至少3个UNDO表空间)
      -- 创建一个新的UNDO表空间
      CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';
      
      -- 可以将已有的UNDO表示为inactive(也可理解为UNDO表空间收缩)
      -- PS:设置为INACTIVE的表空间的STATE为empty,表示这个表空间不包含任何事务回滚数据,且表空间也收缩为默认大小
      ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
      
      -- 可以将inactive的UNDO转为active
      ALTER UNDO TABLESPACE innodb_undo_001 SET ACTIVE;
      
      -- 可以将inactive的UNDO表空间进行删除
      -- PS:默认以innodb_开头初始化的undo表空间不可被删除
      DROP UNDO TABLESPACE innodb_undo_001;
      ERROR: 3119 (42000): InnoDB: Tablespace names starting with `innodb_` are reserved.
      
      -- 非系统默认的UNDO在inactive后可被删除
      ALTER UNDO TABLESPACE undo_003 SET ACTIVE;
      Query OK, 0 rows affected (0.0030 sec)
  • 临时表空间
    • MySQL5.7增加了临时表空间(ibtmp1)
    • innodb_temp_data_file_path
      -rw-r-----  1 mysql mysql 79691776 Mar 26 14:25  ibdata1    # 系统表空间,默认所有信息存在这里
      -rw-r-----  1 mysql mysql 12582912 Mar 26 13:46  ibtmp1     # 临时表空间
      -rw-r-----  1 mysql mysql 16777216 Mar 26 14:25  undo_001   # undo表空间
      -rw-r-----  1 mysql mysql 16777216 Mar 26 14:27  undo_002
      -rw-r-----  1 mysql mysql 16777216 Mar 26 14:23  undo_003.ibu    # 手动创建的undo表空间
      -rw-r-----  1 mysql mysql 16777216 Mar 26 14:25  undo_004.ibu
      
      root@ubuntu:/data/mysql/dbt3_s1# ll
      total 2906492
      drwxr-x---  2 mysql mysql       4096 Mar 12 13:46 ./
      drwxr-xr-x 10 mysql mysql       4096 Mar 26 14:25 ../
      -rw-r-----  1 mysql mysql   41943040 Mar 12 13:42 customer.ibd    #ibd中包含了索引和数据,从8.0开始,表结构定义文件存储在数据字典中
      -rw-r-----  1 mysql mysql 2403336192 Mar 12 13:46 lineitem.ibd

系统表空间(ibdata1)存储数据和独立表空间存储就性能上而言没有区别,当需要删除表(drop table)时,独立的表空间存储可以直接删除文件,而ibdata1存储也只是把该部分表空间标记为可用,所以从速度上看很难说哪个更快;但是删除文件后ibdata1占用的空间不会释放;

分区表会产生独立的ibd文件;

独立的表空间,一个表对应一个ibd文件,给人的感觉更加直观;

单个ibd文件直接拷贝到新的数据库中无法直接恢复:

  1. 原因一:元数据信息还是在ibdata1中
  2. 原因二:部分索引文件存在于Change Buffer中,目前还是存放于ibdata1文件中

  select * from information_schema.innodb_tablespaces\G  -- 查看表空间的元数据信息

 

 General表空间 

新建一张表,并让该表的存储路径不是默认的/data/mysql,而是指定的存储位置/data1

前提条件

  • 创建/data1目录
  • 修改/data1目录的属主和属组为mysql
  • 添加参数到my.cnf后重启MySQL
    root@ubuntu:/data/mysql# mkdir /data1
    root@ubuntu:/data/mysql# chown -R mysql.mysql /data1/
    
    [mysqld]
    innodb_directories = '/data1' --添加到my.cnf配置中后重启

方法1

root@mysqldb 15:04:  [gavin]> create table test_ger1 (a int) data directory='/data1';
Query OK, 0 rows affected (0.00 sec)

root@ubuntu:/data/mysql# ll /data1/gavin/    -- 因为我是在gavin数据库里面创建的test_ger1表,所以在/data1目录下自动生成gavin目录
total 120
drwxr-x--- 2 mysql mysql   4096 Mar 26 15:04 ./
drwxr-xr-x 3 mysql mysql   4096 Mar 26 14:58 ../
-rw-r----- 1 mysql mysql 114688 Mar 26 15:04 test_ger1.ibd    -- 生成的表空间文件

 

标签:Mar,16,--,undo,InnoDB,UNDO,mysql,空间
From: https://www.cnblogs.com/gavin-zheng/p/18095640

相关文章

  • 【前端素材】推荐5种优质大数据分析展示页面网站设计(16)(附源码)
    一、需求分析1、功能分析大数据分析展示页面是一个用于呈现和分析大数据的平台界面,旨在帮助用户更直观、更高效地理解和利用数据。该页面通常结合了数据分析、可视化技术以及用户交互设计,以提供丰富的数据展示和分析功能。大数据分析展示页面是大数据分析过程中至关重要的一......
  • ISC2016训练赛-phrackCTF-FindKey
    ISC2016训练赛——phrackCTFReverse-FindKey:题目描述:FLAG就是你输入的key解题方法:将题目附件下载下来是一个无后缀名的文件,把他放进exeinfope.exe里查看一下它的信息这里我们看到它不是一个EXE文件,但是下面有提示说是用python,然后我们将他的后缀名改成.py文件,用python打开是......
  • 16环境变量、符号$、上传下载、解压压缩
    环境变量环境变量是一组信息记录,类型是KeyValue型(名称=值),用于操作系统运行的时候记录关键信息一系列命令其实本质上就是一个个的可执行程序:比如cd命令的本体就是:/usr/bin/cd这个程序文件环境变量PATH环境变量PATH会记录一组目录,目录之间用:隔开。这里记录的是命令的搜索路......
  • 2024-03-26 16:26:50.745 [main] INFO c.a.d.s.b.a.DruidDataSourceAutoConfigure -
    2024-03-2616:42:38.759[main]INFOc.a.d.s.b.a.DruidDataSourceAutoConfigure-InitDruidDataSource2024-03-2616:42:43.114[main]INFOcom.alibaba.druid.pool.DruidDataSource-{dataSource-1}inited2024-03-2616:42:47.348[main]INFOcom.alibaba.druid.po......
  • Mysql的Innodb引擎--一起学习吧之数据库
    MySQL的InnoDB引擎是MySQL数据库管理系统中的一个重要的存储引擎,它通过提供事务支持、行级锁定、外键约束、MVCC、缓存、索引优化、数据恢复以及分区和表空间等功能,为数据库提供了高性能、高可靠性和高扩展性的解决方案。这使得InnoDB成为大多数MySQL应用的首选存储引擎。一、......
  • 【MATLAB源码-第16期】基于matlab的MSK定是同步仿真,采用gardner算法和锁相环。
    操作环境:MATLAB2022a1、算法描述**锁相环(PLL)**是一种控制系统,用于将一个参考信号的相位与一个输入信号的相位同步。它在许多领域中都有应用,如通信、无线电、音频、视频和计算机系统。锁相环通常由以下几个关键组件组成:1.**相位比较器(PhaseComparator):**这个组件比较输......
  • 专注驱动器芯片,包括MASTERGAN1TR、VNQ860SP、VNH9013YTR、VN5160STR用于汽车应用
    1、MASTERGAN1TR——半桥驱动器通用DMOS31QFN输出配置:半桥应用:通用接口:-负载类型:容性,感性技术:DMOS导通电阻(典型值):150毫欧电流-输出/通道:10A电流-峰值输出:17A电压-供电:4.75V~9.5V电压-负载:600V(最大)工作温度:-40°C~150°C(TJ)特性:自举电路故障保护:超温,UVLO安装类型......
  • 并查集专题(附并查集模板)P3367 【模板】并查集 P1656 炸铁路
    并查集模板f数组要初始化autofind(autox){if(f[x]==x)returnx;elsereturnf[x]=find(f[x])路径压缩,同一条路上都归到一个点上}voidunionset(autoa,autob){f[find(a)]=find(b);auto会自动适配数据类型} P3367【模板】并查集题目描述如题......
  • 十二 167. 木棒 (回溯)
    167.木棒(回溯)思路:把最长木棒长度作为初始,逐渐增减,使用dfs寻找最小的可能初始长度。需要注意的点就是剪枝:剪枝1:sum%length==0只有length是sum的约数才有可能凑出多个等长的木棒剪枝2:优化搜索顺序,木棍长度从大到小排序,可以减少搜索的分支排除等效冗余优化剪......
  • HFCG-3500+ 信号调节 LTCC High Pass Filter 3900-16500MHz 0805 陶瓷滤波器 Mini-Cir
    Mini-Circuits是一家专注于射频和微波产品的跨国公司,总部位于美国纽约。Mini-Circuits提供的产品涵盖了信号调理、信号发生、频率合成、混合信号处理等领域,广泛应用于无线通信、雷达、测试测量、航空航天等行业。制造商:   Mini-Circuits   产品种类:   信号调......