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

相关文章

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句