MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)

news2025/1/13 15:59:33

文章目录

  • MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)
    • 系统表空间(System Tablespace)
      • 主要系统变量
        • innodb_data_file_path
          • 关于autoextend和max属性
          • 系统表空间文件默认路径
        • innodb_file_per_table
      • 其他相关系统变量
        • innodb_autoextend_increment
        • innodb_data_home_dir
      • 增加系统表空间的大小
        • 0.查看当前设置
        • 1.停止MySQL服务器
        • 2.修改innodb_data_file_path参数
        • 3.启动MySQL服务器
        • 4.查看设置结果
      • 减小系统表空间的大小
    • 例题
    • 参考

【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)

MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)

InnoDB表空间是MySQL中用于存储InnoDB存储引擎表数据和索引的物理文件。
InnoDB Architecture
InnoDB表空间根据用途可以分成多种类型:

  • 数据表空间:
    • System tablespace(系统表空间)
    • File-per-table tablespaces(单独表空间)
    • General tablespaces(一般表空间)
  • Undo 表空间
  • 临时表空间(Temporary table tablespaces)

系统表空间(System Tablespace)

系统表空间(System Tablespace)是InnoDB的默认表空间,存储了系统表和一些共享表的数据和索引。

  • 更改缓冲区(Change Buffer)的存储区域位于InnoDB的系统表空间中。

  • 除了存储更改缓冲区之外,如果表是在系统表空间而不是文件表空间或通用表空间中创建的话,系统表空间还可以包含表和索引数据

  • 在MySQL 8.0之前的版本中,系统表空间还包含InnoDB的数据字典(在MySQL 8.0中,InnoDB将元数据存储在MySQL数据字典中)。

  • 在MySQL 8.0.20之前的版本中,系统表空间还包含了双写缓冲区(doublewrite buffer )的存储区域(MySQL 8.0.20中双写缓冲区的存储区域位于单独的双写文件中doublewrite files )。

    ※关于Doublewrite Buffer可以参考如下说明
    15.6.4 Doublewrite Buffer
    https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html

  • 系统表空间可以有一个或多个数据文件,默认情况下,在数据目录中创建一个名为ibdata1的系统表空间数据文件。

主要系统变量

和系统表空间(System Tablespace)相关的系统变量主要包括如下2个:

- innodb_data_file_path
- innodb_file_per_table
innodb_data_file_path

innodb_data_file_path是一个InnoDB存储引擎的系统变量,用于指定InnoDB表空间的数据文件路径和大小。

Command-Line Format–innodb-data-file-path=file_name
System Variableinnodb_data_file_path
ScopeGlobal
DynamicNo
SET_VAR Hint AppliesNo
TypeString
Default Valueibdata1:12M:autoextend

参考:
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_data_file_path

该系统变量的默认值为ibdata1:12M:autoextend,表示使用名为ibdata1的数据文件作为系统表空间的默认文件,初始大小为12兆字节,并且可以自动扩展。

file_name:file_size[:autoextend[:max:max_file_size]]

※文件大小可以用K、M或G来表示,如果使用K来指定数据文件的大小,应该是1024的倍数(以KB为单位的值将会被四舍五入到MB)。所有数据文件的大小之和必须至少略大于12MB。

例:

mysql> show variables like 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set (0.00 sec)

mysql>

innodb_data_file_path的值可以包含一个或多个数据文件的定义,每个数据文件的定义由冒号分隔。

innodb_data_file_path = ibdata1:12M;ibdata2:24M:autoextend
关于autoextend和max属性

注意autoextend和max属性只能用于最后指定的数据文件。
另外,当指定了autoextend属性时,数据文件会根据需要以64MB为单位自动增加大小。
自动增加的单位大小由innodb_autoextend_increment变量控制。

例:

mysql> show variables like 'innodb_autoextend_increment';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64    |
+-----------------------------+-------+
1 row in set, 1 warning (0.00 sec)

系统表空间文件默认路径

系统表空间文件默认情况下会在数据目录(datadir)中创建。
可以使用innodb_data_home_dir选项指定替代位置。
例如,要在名为myibdata的目录中创建系统表空间数据文件,可以使用以下配置:

[mysqld]
innodb_data_home_dir = /myibdata/
innodb_data_file_path=ibdata1:50M:autoextend

在指定innodb_data_home_dir的值时,需要在末尾加上斜杠。
InnoDB不会创建目录,因此在启动服务器之前,需要确保指定的目录已经存在。同时,确保MySQL服务器具有在该目录中创建文件的适当访问权限。

InnoDB通过将innodb_data_home_dir的值与数据文件名进行文本连接来形成每个数据文件的目录路径。
如果未定义innodb_data_home_dir,则默认值为“./”,即数据目录。(MySQL服务器在开始执行时会将其当前工作目录更改为数据目录。)

另外,还可以为系统表空间数据文件指定绝对路径。以下配置与前面的配置等效:

[mysqld]
innodb_data_file_path=/myibdata/ibdata1:50M:autoextend

当为innodb_data_file_path指定绝对路径时,该设置不会与innodb_data_home_dir设置进行连接。
系统表空间文件将在指定的绝对路径中创建。在启动服务器之前,指定的目录必须存在。

参考:
System Tablespace Data File Configuration
https://dev.mysql.com/doc/refman/8.0/en/innodb-init-startup-configuration.html#innodb-startup-data-file-configuration

innodb_file_per_table

对于innodb_file_per_table参数用于控制创建表时候的表空间,
当启用时,表会创建在 File-per-table tablespaces(单独表空间)中。
当禁用时,表会创建在System tablespace(系统表空间)中。

innodb_file_per_table变量可以使用SET GLOBAL语句在运行时进行配置,在启动时在命令行中指定,或在选项文件中指定。
当位于File-per-table tablespaces(单独表空间)中的表被truncate 或者drop时,释放的空间将返回给操作系统。截
位于系统表空间中的表被truncate 或者drop时,仅释放系统表空间中的空间。系统表空间中的空闲空间可以再次用于InnoDB数据,但不会返回给操作系统。
系统表空间数据文件永远不会缩小。

Command-Line Format–innodb-file-per-table
System Variableinnodb_file_per_table
ScopeGlobal
DynamicYes
SET_VAR Hint AppliesNo
TypeBoolean
Default ValueON

例:

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.01 sec)

mysql>

参考:
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_file_per_table

其他相关系统变量

innodb_autoextend_increment

innodb_autoextend_increment是用于控制自动扩展InnoDB系统表空间文件大小的增量大小(以兆字节为单位)。
当系统表空间文件满时,会自动扩展其大小。默认值为64MB。

注意innodb_autoextend_increment设置不会影响 File-per-table tablespaces(单独表空间)或 General tablespaces(一般表空间)。这些文件会自动扩展但不受innodb_autoextend_increment设置的影响。
file-per-table tablespace files or general tablespace files

Command-Line Format–innodb-autoextend-increment=#
System Variableinnodb_autoextend_increment
ScopeGlobal
DynamicYes
SET_VAR Hint AppliesNo
TypeInteger
Default Value64
Minimum Value1
Maximum Value1000
Unitmegabytes

参考:
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_autoextend_increment

innodb_data_home_dir

innodb_data_home_dir用于InnoDB系统表空间数据文件的目录路径的公共部分。
默认值是MySQL数据目录。

Command-Line Format–innodb-data-home-dir=dir_name
System Variableinnodb_data_home_dir
ScopeGlobal
DynamicNo
SET_VAR Hint AppliesNo
TypeDirectory name

参考:
https://dev.mysql.com/doc/refman/8.0/en/innodb-parameters.html#sysvar_innodb_data_home_dir

增加系统表空间的大小

通过修改innodb_data_file_path参数,可以实现增加系统表空间的大小:

1.最简单方法是将innodb_data_file_path参数配置为自动扩展(事实上默认开启autoextend)。
2.innodb_data_file_path参数中添加另一个数据文件来增加系统表空间的大小。

对于一般参数而言,可以通过SET命令设置。但是系统表空间相关innodb_data_file_path参数设置,不能通过SET 命令进行修改。需要通过修改my.cnf(my.ini)配置文件中的相应参数来实现。

mysql> SET PERSIST innodb_data_file_path='ibdata1:12M;ibdata2:24M:autoextend';
ERROR 1238 (HY000): Variable 'innodb_data_file_path' is a read only variable
mysql> SET PERSIST_ONLY innodb_data_file_path='ibdata1:12M;ibdata2:24M:autoextend';
ERROR 1238 (HY000): Variable 'innodb_data_file_path' is a non persistent read only variable

参考:
MySQL 8.0 OCP (1Z0-908) 考点精析-安装与配置考点1:设置系统变量
https://teacherwhat.blog.csdn.net/article/details/132378405

要增加系统表空间的大小操作步骤如下。

0.查看当前设置

参数设置:

mysql> show variables like 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set (0.01 sec)

mysql>

文件系统

root@mysql-vm:/var/lib/mysql#  ls -lh ibdata*
-rw-r----- 1 mysql mysql 12M Oct 14 13:49 ibdata1
root@mysql-vm:/var/lib/mysql#
1.停止MySQL服务器

停止MySQL服务。

root@mysql-vm:/var/lib/mysql# systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-10-14 13:49:50 CST; 2h 56min ago
   Main PID: 678 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1102)
     Memory: 403.8M
        CPU: 1min 20ms
     CGroup: /system.slice/mysql.service
             └─678 /usr/sbin/mysqld

Oct 14 13:49:41 mysql-vm systemd[1]: Starting MySQL Community Server...
Oct 14 13:49:50 mysql-vm systemd[1]: Started MySQL Community Server.


root@mysql-vm:/var/lib/mysql# systemctl stop mysql
root@mysql-vm:/var/lib/mysql#  systemctl status mysql
○ mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2023-10-14 16:46:32 CST; 32s ago
    Process: 678 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
   Main PID: 678 (code=exited, status=0/SUCCESS)
     Status: "Server shutdown complete"
        CPU: 1min 164ms

Oct 14 13:49:41 mysql-vm systemd[1]: Starting MySQL Community Server...
Oct 14 13:49:50 mysql-vm systemd[1]: Started MySQL Community Server.
Oct 14 16:46:29 mysql-vm systemd[1]: Stopping MySQL Community Server...
Oct 14 16:46:32 mysql-vm systemd[1]: mysql.service: Deactivated successfully.
Oct 14 16:46:32 mysql-vm systemd[1]: Stopped MySQL Community Server.
Oct 14 16:46:32 mysql-vm systemd[1]: mysql.service: Consumed 1min 164ms CPU time.
root@mysql-vm:/var/lib/mysql#
2.修改innodb_data_file_path参数

修改my.cnf(my.ini)配置文件中的innodb_data_file_path参数。

my.cnf(my.ini)配置文件的位置可以通过【mysql --help】命令中的Default options内容查看。

例:

$ mysql --help
...
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

配置文件中添加如下内容:

innodb_data_file_path = ibdata1:12M;ibdata2:24M:autoextend

如果innodb_data_file_path设置中的最后一个数据文件定义了autoextend属性,请将其删除,并修改size属性以反映当前数据文件的大小。要确定要指定的适当数据文件大小,请检查文件系统中的文件大小,并将该值向下舍入到最接近的MB值,其中1MB等于1024 x 1024字节。

将一个新的数据文件追加到innodb_data_file_path设置中,可选择指定autoextend属性。autoextend属性只能针对innodb_data_file_path设置中的最后一个数据文件指定。

3.启动MySQL服务器

启动MySQL服务

root@mysql-vm:/etc/mysql/mysql.conf.d# systemctl start mysql
root@mysql-vm:/etc/mysql/mysql.conf.d# systemctl status mysql
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-10-14 17:00:38 CST; 11s ago
    Process: 1696 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 1704 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1102)
     Memory: 394.9M
        CPU: 1.120s
     CGroup: /system.slice/mysql.service
             └─1704 /usr/sbin/mysqld

Oct 14 17:00:37 mysql-vm systemd[1]: Starting MySQL Community Server...
Oct 14 17:00:38 mysql-vm systemd[1]: Started MySQL Community Server.
root@mysql-vm:/etc/mysql/mysql.conf.d#
4.查看设置结果

参数设置:

mysql>  show variables like 'innodb_data_file_path';
+-----------------------+------------------------------------+
| Variable_name         | Value                              |
+-----------------------+------------------------------------+
| innodb_data_file_path | ibdata1:12M;ibdata2:24M:autoextend |
+-----------------------+------------------------------------+
1 row in set (0.01 sec)

mysql>

文件系统

root@mysql-vm:/var/lib/mysql#  ls -lh ibdata*
-rw-r----- 1 mysql mysql 12M Oct 14 17:00 ibdata1
-rw-r----- 1 mysql mysql 24M Oct 14 17:00 ibdata2
root@mysql-vm:/var/lib/mysql#

减小系统表空间的大小

目前MySQL并不支持直接减小现有系统表空间的大小。
减小系统表空间的唯一方法是创建的新MySQL实例,然后将数据从备份恢复到使用所需系统表空间大小。

为了避免过大的系统表空间,考虑使用单独表空间(file-per-table tablespaces)或一般表空间(general tablespaces)来存储数据。

※注:8.0版本中,创建InnoDB表时会默认使用单独表空间(file-per-table tablespaces)类型(innodb_file_per_table参数控制)。
与系统表空间不同,单独表空间(file-per-table tablespaces)在执行truncated或者 dropped时会将磁盘空间返回给操作系统。

例题

Choose two.
Which two are contained in the InnoDB system tablespace (ibdata1) by default?

A) doublewrite buffer
B) change buffer
C) InnoDB Data Dictionary
D) primary indexes
E) table data
F) user privileges

答案 AB

参考

15.6.3 Tablespaces
https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace.html

https://dev.mysql.com/doc/refman/8.0/en/innodb-init-startup-configuration.html#innodb-startup-data-file-configuration

https://segmentfault.com/q/1010000039941468?utm_source=sf-similar-question
https://wenku.baidu.com/view/8e6b63fca2c7aa00b52acfc789eb172ded639919.html?fr=sogou&wkts=1694952489836

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1099460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

猫头虎博客带您使用Markdown编辑器

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

山西电力市场日前价格预测【2023-10-17】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-17)山西电力市场全天平均日前电价为337.57元/MWh。其中,最高日前电价为437.22元/MWh,预计出现在18: 30。最低日前电价为281.67元/MWh,预计…

微服务docker部署实战

docker基础和进阶(*已掌握的可以跳过 *) 基础 docker基础 进阶 docker进阶 准备工作 提前准备好mysql和redis的配置,如下 在/zzq/mysql/conf目录下配置mysql配置文件my.cnf [client] #设置客户端字符集 default_character_setutf8 [mysqld] #开启定时任务 event_s…

Android组件通信——广播机制:BroadcastReceiver(二十九)

1. BroadcastReceiver 1.1 知识点 (1)掌握广播接收器的主要作用及基本实现; (2)可以使用广播启动Service; (3)理解闹钟服务的使用; 1.2 具体内容 广播这个名词大家…

BAT026:删除当前目录指定文件夹以外的文件夹

引言:编写批处理程序,实现删除当前目录指定文件夹以外的文件夹。 一、新建Windows批处理文件 参考博客: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件,点击【编辑】…

vueday01——使用属性绑定+ref属性定位获取id

1.属性绑定&#xff08;Attribute 绑定&#xff09; 第一种写法 <div v-bind:id"refValue"> content </div> 第二种写法&#xff08;省略掉v-bind&#xff09; <div :id"refValue"> content </div> 2.代码展示 <template…

【论文阅读】 Cola-Dif; An explainable task-specific synthesis network

文章目录 CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI SynthesisAn Explainable Deep Framework: Towards Task-Specific Fusion for Multi-to-One MRI Synthesis CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI Synthesis 论文…

谈谈 RDB

谈谈 RDB RDB&#xff1a;相当于对内存中的数据&#xff0c;拍一张数据快照。RDB文件存储的是二进制数据。 这里提一点&#xff0c;Redis 的快照是全量快照&#xff0c;也就是说每次执行快照&#xff0c;都是把内存中的「所有数据」都记录到磁盘中。 所以可以认为&#xff0c;执…

在 Windows Server RDS 服务器 上重置 120 天宽限期

如果您出于测试目的安装了 RDS Server 2016/2019/2022&#xff0c;并且 RDS 许可宽限期已过期&#xff0c;请继续阅读下面的内容以了解如何重置 120 天宽限期。您可能知道&#xff0c;在安装 RDS Server 2016 时&#xff0c;您有 120 天的时间来安装 RD 客户端访问许可证 &…

数据结构--堆

一. 堆 1. 堆的概念 堆&#xff08;heap&#xff09;&#xff1a;一种有特殊用途的数据结构——用来在一组变化频繁&#xff08;发生增删查改的频率较高&#xff09;的数据集中查找最值。 堆在物理层面上&#xff0c;表现为一组连续的数组区间&#xff1a;long[] array &…

【LeetCode】29. 两数相除

1 问题 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#xff0c;-…

ubuntu 18.04 LTS交叉编译opencv 3.4.16并编译工程[全记录]

一、下载并解压opencv 3.4.16源码 https://opencv.org/releases/ 放到home路径下的Exe文件夹&#xff08;专门放用户安装的软件&#xff09;中&#xff0c;其中build是后期自建的 为了版本控制&#xff0c;保留了3.4.16&#xff0c;并增加了-gcc-arm 二、安装cmake和cmake-g…

nodejs基于vue网上考勤系统

本网上考勤系统是针对目前考勤的实际需求&#xff0c; 采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率高&#xff0c;节省了开支&#xff0c;提高了工作的效率。 本网上考勤系统主要包括个人中心、员工请假管理、员工考勤管…

哈希表简介

基本介绍 思路分析 代码实现 # 哈希表 # 员工信息 class Emp:id: int 0name: str next Nonedef __init__(self, id, name):self.id idself.name namedef __str__(self):return f"id{self.id}, name{self.name}"class EmpLinkedList:# 头指针&#xff0c;指向第…

jenkins整合gerrit

背景 公司项目之前使用jenkins整合了gitlab&#xff0c;后面代码迁移到gerrit&#xff0c;所以需要修改jenkins配置。下面就简单的介绍一下jenkins如何整合gerrit。 环境 服务器&#xff1a;linux 环境&#xff1a;docker、jenkins 代码仓库&#xff1a;gerrit 前提 docke…

Flink的ResourceManager详解(一)

ResourceManager 总结 一、概述 1、ResourceManager 管理 Flink 集群中的计算资源&#xff0c;计算资源主要来自 TaskManager 组件。 2、如果集群采用 Native【本地模式】部署&#xff0c;则 ResourceManager 会动态地向集群资源管理器申请 Container 并启动TaskManager&…

depcheck检查项目依赖的安装情况-帮你解决各种项目运行灵异事件

depcheck检查项目缺失的依赖 depcheck介绍与安装介绍安装 depcheck使用基础使用注意 进阶使用 删除多余的依赖注意 depcheck介绍与安装 介绍 工作中&#xff0c;以下的场景恐怕大家都有经历过&#xff1a; 从代码仓库上面 clone 的项目&#xff0c;自己本地一运行就报错… 用…

Ruby和面向对象技术

Ruby和许多极为流行的编程语言都是面向对象的。多数的面向对象编程语言&#xff0c;每个对象都是一个样例或者既定类的实例以及独立对象的行为。 一、创建一个通用对象 创建一个通用对象 obj Object.new定义通用对象的行为 def obj.talk puts "I am an object"p…

MySQL远程连接

一、什么是mysq的远程连接? 1、本地连接 直接在本地使用mysqladmin命令登录 mysql -u root -p 解释如下: mysql:mysql 命令表示要启动 MySQL 客户端。-u root:-u 选项指定要使用的用户名。在这里,我们使用 root 用户名作为示例。-p:-p 选项需要用户输入密码。如果省…

Unexpected mutation of “dialogVisible“ prop.

问题记录&#xff1a; Vue2项目在封装element-ui的dialog组件时&#xff0c;eslint报错 Unexpected mutation of “dialogVisible” prop.eslintvue/no-mutating-props 大致意思是父组件传递过来的 dialogVisible 属性&#xff0c;不允许在子组件中修改父组件的值 解决方法&a…