Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


17.6.3.1 系统表空间

系统表空间是变更缓冲区的存储区域。如果表在系统表空间中而不是文件表或通用表空间中,则可能还包含表和索引数据。

系统表空间可以有一个或多个数据文件。默认情况下,在数据目录中创建了一个名为ibdata1的单个系统表空间数据文件。系统表空间数据文件的大小和数量由innodb_data_file_path启动选项定义。配置信息,请见系统表空间数据文件配置

关于系统表空间的其他信息,请参阅以下主题在该部分中:

调整系统表空间

本节描述了如何增加或减少系统表空间的大小。

Increasing the Size of the System Tablespace

增加系统表空间大小的最简单方法是将其配置为自动扩展。要做到这一点,请在innodb_data_file_path设置中指定最后一个数据文件的autoextend属性,并重新启动服务器。例如:

innodb_data_file_path=ibdata1:10M:autoextend

当指定了autoextend属性时,数据文件将自动增加大小,以8MB为增量单位,直到需要空间为止。innodb_autoextend_increment变量控制增量大小。

您也可以通过添加另一个数据文件来增加系统表空间大小。要做到这一点:

  1. 停止MySQL服务器。

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

  3. 将新数据文件追加到innodb_data_file_path设置中, optionally specifying the autoextend attribute。只能在innodb_data_file_path设置中的最后一个数据文件上指定autoextend属性。

  4. 重新启动MySQL服务器。

例如,这个表空间有一个自动扩展的数据文件:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:10M:autoextend

假设数据文件已经长期增长到988MB。修改大小属性以反映当前数据文件大小,并指定一个新的50MB自动扩展数据文件后,这是innodb_data_file_path设置的结果:

innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend

在添加新数据文件时,不要指定现有文件名。InnoDB在启动服务器时创建和初始化新的数据文件。

Note

不能通过修改大小属性来增加现有系统表空间数据文件的大小。例如,改变innodb_data_file_path设置从ibdata1:10M:autoextendibdata1:12M:autoextend,在启动服务器时会出现以下错误:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system
data file './ibdata1' is of a different size 640 pages (rounded down to MB) than
specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!

错误表明现有数据文件大小(以InnoDB页面为单位)不同于配置文件中指定的数据文件大小。如果您遇到这个错误,请恢复之前的innodb_data_file_path设置,并查看系统表空间resize指南。

Decreasing the Size of the InnoDB System Tablespace

减少现有系统表空间大小不受支持。要实现较小的系统表空间,可以从备份中恢复数据到一个新的MySQL实例,该实例使用了所需的系统表空间大小配置。

关于创建备份的信息,请见第17.18.1节,“InnoDB Backup”

关于为新系统表空间配置数据文件的信息。请参阅System Tablespace Data File Configuration

为了避免大型系统表空间,考虑使用文件-per-表表空间或通用表空间来存储您的数据。文件-per-表表空间是默认表空间类型,在创建InnoDB表时隐式使用。与系统表空间不同的是,文件-per-表表空间在被截断或删除时将磁盘空间返回给操作系统。更多信息,请参阅Section 17.6.3.2, “File-Per-Table Tablespaces”。通用表空间是多表表空间,可以作为系统表空间的替代方案。请参阅Section 17.6.3.3, “General Tablespaces”

使用裸磁盘分区为系统表空间

裸磁盘分区可以用作系统表空间数据文件。这项技术在 Windows 和一些 Linux 和 Unix 系统上启用了非缓冲 I/O,避免了文件系统开销。请对您的系统进行测试,以验证是否使用裸分区提高性能。

在使用裸盘分区时,确保运行 MySQL 服务器的用户 ID 对该分区具有读取和写入权限。例如,如果以 mysql 用户运行服务器,那么该分区必须对 mysql 用户可读可写。如果使用 --memlock 选项运行服务器,那么服务器必须以 root 用户身份运行,因此该分区必须对 root 用户可读可写。

以下过程涉及到配置文件修改。有关详细信息,请参阅第 6.2.2.2 节,“使用选项文件”

Allocating a Raw Disk Partition on Linux and Unix Systems
  1. 要为新服务器实例使用裸设备,首先准备配置文件,设置innodb_data_file_pathraw 关键字。例如:

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw

    该分区必须至少大于您指定的大小。请注意,InnoDB 中的 1MB 等于 1024 × 1024 字节,而磁盘规范中通常表示 1,000,000 字节。

  2. 然后,在第一次启动服务器时使用--initialize--initialize-insecureInnoDB 注意到 raw 关键字,并初始化新分区,然后停止服务器。

  3. 现在重新启动服务器。InnoDB 现在允许对该分区进行更改。

Allocating a Raw Disk Partition on Windows

在 Windows 系统上,Linux 和 Unix 系统的步骤和相关指南也适用,但innodb_数据文件路径设置有一些不同。例如:

[mysqld]
innodb_data_home_dir=
innodb_data_file_path=//./D::10Graw

//./ 对应 Windows 访问物理磁盘的语法为 \\.\,在上面的示例中,D: 是分区的驱动器字母。