系统表空间
系统表空间是双写缓冲区和更改缓冲区的存储区域。如果在系统表空间中创建表,而不是在每个表文件或常规表空间中创建表,则它也可能包含表和索引数据。在以前的MySQL版本中,系统表空间包含InnoDB
数据字典。在MySQL 8.0中,InnoDB
将元数据存储在MySQL数据字典中。请参见MySQL数据字典。
系统表空间可以具有一个或多个数据文件。默认情况下,ibdata1
在数据目录中创建一个名为的系统表空间数据文件。系统表空间数据文件的大小和数量由innodb_data_file_path
启动选项定义。有关配置信息,请参阅《系统表空间数据文件配置》。
本节以下主题下提供了有关系统表空间的其他信息:
- 调整系统表空间的大小
- 对系统表空间使用原始磁盘分区
调整系统表空间的大小
本节介绍如何增加或减少系统表空间的大小。
增加系统表空间的大小
增加系统表空间大小的最简单方法是将其配置为自动扩展。为此,请autoextend
为设置中的最后一个数据文件指定属性innodb_data_file_path
,然后重新启动服务器。例如:
innodb_data_file_path=ibdata1:10M:autoextend
autoextend
指定该属性后,数据文件将根据需要的空间自动增加8MB的大小。所述innodb_autoextend_increment
可变控制增量大小。
您还可以通过添加另一个数据文件来增加系统表空间的大小。为此:
- 停止MySQL服务器。
- 如果
innodb_data_file_path
使用autoextend
属性定义了设置中的最后一个数据文件,则将其删除,然后修改size属性以反映当前数据文件的大小。要确定要指定的适当数据文件大小,请检查文件系统中的文件大小,并将该值四舍五入为最接近的MB值,其中MB等于1024 x 1024。 - 将新的数据文件追加到
innodb_data_file_path
设置中,可以选择指定autoextend
属性。该autoextend
属性只能在最后一个数据文件中指定innodb_data_file_path
的设置。 - 启动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
启动服务器时,将创建并初始化新的数据文件。
注意您不能通过更改其大小属性来增加现有系统表空间数据文件的大小。例如,启动服务器时,将
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
设置,然后参考系统表空间调整大小说明。
InnoDB
页面大小由innodb_page_size
变量定义。默认值为16384字节。
减少InnoDB系统表空间的大小
不支持减小现有系统表空间的大小。实现较小系统表空间的唯一选择是将数据从备份还原到使用所需系统表空间配置创建的新MySQL实例。
有关创建备份的信息,请参见“ InnoDB备份”。
有关为新系统表空间配置数据文件的信息。请参阅系统表空间数据文件配置。
为避免使用较大的系统表空间,请考虑为数据使用每表文件表空间。每表文件表空间是默认表空间类型,在创建InnoDB
表时隐式使用。与系统表空间不同,磁盘空间在截断或删除在每个表文件表空间中创建的表后会返回到操作系统。有关更多信息,请参见“每表文件表空间”。
对系统表空间使用原始磁盘分区
您可以将原始磁盘分区用作InnoDB
系统表空间中的数据文件。此技术可在Windows以及某些Linux和Unix系统上启用无缓冲I / O,而不会增加文件系统开销。在有和没有原始分区的情况下执行测试,以验证此更改是否确实提高了系统性能。
使用原始磁盘分区时,请确保运行MySQL服务器的用户ID具有该分区的读写特权。例如,如果您以mysql
用户身份运行服务器,则分区必须可由读取和写入mysql
。如果使用该--memlock
选项运行服务器,则服务器必须以身份运行root
,因此该分区必须是可读可写的root
。
下述步骤涉及选项文件的修改。有关更多信息,请参见“使用选项文件”。
在Linux和Unix系统上分配原始磁盘分区
创建新数据文件时,请在
newraw
该innodb_data_file_path
选项的数据文件大小后立即指定关键字。分区必须至少与您指定的大小一样大。请注意,1MB inInnoDB
是1024×1024字节,而磁盘规格中的1MB通常意味着1,000,000字节。[mysqld] innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Gnewraw;/dev/hdd2:2Gnewraw
- 重新启动服务器。
InnoDB
注意newraw
关键字并初始化新分区。但是,请不要创建或更改任何InnoDB
表。否则,当您下次重新启动服务器时,将InnoDB
重新初始化分区,并且所做的更改将丢失。(为安全起见,InnoDB
当newraw
指定任何分区时,防止用户修改数据。) 后
InnoDB
已初始化新的分区,停止服务器,更改newraw
数据文件规范raw
:[mysqld] innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Graw;/dev/hdd2:2Graw
- 重新启动服务器。
InnoDB
现在允许进行更改。
在Windows上分配原始磁盘分区
在Windows系统上,适用于Linux和Unix系统的相同步骤和随附的准则,只不过innodb_data_file_path
Windows上的设置略有不同。
创建新的数据文件时,请在
newraw
该innodb_data_file_path
选项的数据文件大小之后立即指定关键字:[mysqld] innodb_data_home_dir= innodb_data_file_path=//./D::10Gnewraw
在
//./
相当于Windows语法\\.\
用于访问物理驱动器。在上面的示例中,D:
是分区的驱动器号。- 重新启动服务器。
InnoDB
注意newraw
关键字并初始化新分区。 后
InnoDB
已初始化新的分区,停止服务器,更改newraw
数据文件规范raw
:[mysqld] innodb_data_home_dir= innodb_data_file_path=//./D::10Graw
- 重新启动服务器。
InnoDB
现在允许进行更改。