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

本文主要是介绍MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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 ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: active (running) since Sat 2023-10-14 13:49:50 CST; 2h 56min agoMain PID: 678 (mysqld)Status: "Server is operational"Tasks: 38 (limit: 1102)Memory: 403.8MCPU: 1min 20msCGroup: /system.slice/mysql.service└─678 /usr/sbin/mysqldOct 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 ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: inactive (dead) since Sat 2023-10-14 16:46:32 CST; 32s agoProcess: 678 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)Main PID: 678 (code=exited, status=0/SUCCESS)Status: "Server shutdown complete"CPU: 1min 164msOct 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 ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)Active: active (running) since Sat 2023-10-14 17:00:38 CST; 11s agoProcess: 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.9MCPU: 1.120sCGroup: /system.slice/mysql.service└─1704 /usr/sbin/mysqldOct 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

这篇关于MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点6:InnoDB Tablespaces之系统表空间(System Tablespace)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID