Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

17.6.3.1 系统表空间

系统表空间是更改缓冲区的存储区域。如果在系统表空间中创建表,而不是在每个文件或通用表空间中创建表,那么它也可能包含表和索引数据。

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

在以下主题中提供了关于系统表空间的更多信息:

调整系统表空间大小

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

Increasing the Size of the System Tablespace

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

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 指定 autoextend 属性。autoextend 属性只能指定为 innodb_data_file_path 设置中的最后一个数据文件。

  4. 启动 MySQL 服务器。

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

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

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

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

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

Note

您不能通过更改现有系统表空间数据文件的大小属性来增加其大小。例如,将 innodb_data_file_path 设置从 ibdata1:10M:autoextend 更改为 ibdata1: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 设置,并参照系统表空间调整大小说明。

Decreasing the Size of the InnoDB System Tablespace

不支持减少现有系统表空间的大小。唯一的选项是从备份还原数据到一个新的 MySQL 实例,该实例具有所需的系统表空间大小配置。

有关备份信息,请参阅 第 17.18.1 节,“InnoDB 备份”

关于配置新系统表空间的数据文件的信息,请参阅系统表空间数据文件配置

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

使用原始磁盘分区作为系统表空间

原始磁盘分区可以用作系统表空间数据文件。这项技术使 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_path 选项中指定数据文件大小后立即添加关键字 newraw。该分区的大小必须至少与您指定的大小相同。请注意,InnoDB 中的 1MB 是 1024 × 1024 字节,而磁盘规格通常将 1MB 视为 1,000,000 字节。

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw
  2. 重新启动服务器。InnoDB 注意到 newraw 关键字并初始化新分区。但是,不要创建或更改任何 InnoDB 表格。否则,当您下次重新启动服务器时,InnoDB 将重新初始化该分区,您的更改将丢失。(作为安全措施,InnoDB 防止用户在任何带有 newraw 的分区上修改数据。)

  3. InnoDB 初始化新分区后,停止服务器,改变 newraw 在数据文件规范中的指定为 raw

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
  4. 重新启动服务器。InnoDB 现在允许进行更改。

Allocating a Raw Disk Partition on Windows

在 Windows 系统上,适用于 Linux 和 Unix 系统的相同步骤和指导方针也适用,除了 innodb_data_file_path 设置在 Windows 上略有不同。

  1. 创建新数据文件时,在 innodb_data_file_path 选项中指定数据文件大小后立即添加关键字 newraw

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

    在上面的示例中,//./ 对应于 Windows 语法 \\.\,用于访问物理驱动器。在上面的示例中,D: 是分区的驱动器号。

  2. 重新启动服务器。InnoDB 注意到 newraw 关键字并初始化新分区。

  3. InnoDB 初始化新分区后,停止服务器,改变 newraw 在数据文件规范中的指定为 raw

    [mysqld]
    innodb_data_home_dir=
    innodb_data_file_path=//./D::10Graw
  4. 重新启动服务器。InnoDB 现在允许进行更改。