系统表空间是变更缓冲区的存储区域。如果表是在系统表空间中创建的,而不是在每个表文件或一般表空间中创建的,那么它也可以包含表和索引数据。在以前的MySQL版本中,system表空间包含InnoDB
数据字典。在MySQL 8.0中,InnoDB
在MySQL数据字典中存储元数据。看到第14章,MySQL数据字典.在以前的MySQL版本中,系统表空间也包含doublewrite缓冲区存储区域。从MySQL 8.0.20开始,这个存储区域位于单独的doublewrite文件中。看到第15.6.4节,“双写缓冲区”.
系统表空间可以有一个或多个数据文件。默认情况下,单个系统表空间数据文件,命名为ibdata1
,在data目录下创建。方法定义系统表空间数据文件的大小和数量innodb_data_file_path
启动选项。有关配置信息,请参见“系统表空间数据文件配置”.
关于系统表空间的其他信息在本节的以下主题中提供:
介绍如何增加或减少system表空间的大小。
增加系统表空间的大小
增加系统表空间大小的最简单方法是将其配置为自动扩展。要做到这一点,请指定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/ibdata: 10m:autoextend
假设数据文件随着时间的推移增长到988MB。这是innodb_data_file_path
在修改size属性以反映当前数据文件大小,并指定一个新的50MB自动扩展数据文件之后设置:
innodb_data_home_dir = innodb_data_file_path = /ibdata/ibdata: 988m
添加新的数据文件时,不要指定已存在的文件名。InnoDB
在启动服务器时创建并初始化新数据文件。
不能通过更改现有系统表空间数据文件的size属性来增加其大小。例如,更改innodb_data_file_path
设置从ibdata1:10M: autoextend
来ibdata1:12M: autoextend
启动服务器时产生以下错误:
[ERROR] [MY-012263] [InnoDB]自动扩展innodb_system数据文件'。/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
Pages)与配置文件中指定的数据文件大小不同。如果遇到此错误,请恢复之前的错误innodb_data_file_path
设置时,请参考系统表空间大小调整说明。
减少InnoDB系统表空间大小
不支持缩小已有系统表空间大小。实现更小的系统表空间的唯一选择是将数据从备份恢复到使用所需的系统表空间大小配置创建的新MySQL实例。
有关创建备份的信息,请参见章节15.18.1,“InnoDB备份”.
有关为新的系统表空间配置数据文件的信息。看到“系统表空间数据文件配置”.
为了避免使用大的系统表空间,可以考虑为数据使用文件-表空间或通用表空间。表文件表空间是默认的表空间类型,在创建表空间时隐式使用InnoDB
表格与系统表空间不同,每个表文件的表空间在被截断或删除时将磁盘空间返回给操作系统。有关更多信息,请参见第15.6.3.2节,“每个表空间文件”.通用表空间是多表空间,也可以作为系统表空间的替代。看到15.6.3.3节“通用表空间”.
裸盘分区可作为系统表空间数据文件使用。这种技术可以在Windows和一些Linux和Unix系统上实现无缓冲的I/O,而不需要文件系统开销。使用或不使用原始分区执行测试,以验证它们是否可以提高系统性能。
当使用裸磁盘分区时,确保运行MySQL服务器的用户ID对该分区具有读写权限。例如,如果将服务器作为mysql
用户,分区必须是可读可写的mysql
.如果使用——memlock
选项,则服务器必须以根
,因此分区必须是可读可写的根
.
下面描述的过程涉及选项文件修改。有关其他信息,请参见第4.2.2.2节“使用选项文件”.
Linux和Unix系统下分配裸磁盘分区
创建新的数据文件时,请指定关键字
newraw
之后立即为数据文件大小innodb_data_file_path
选择。分区必须至少与指定的大小相同。注意1MBInnoDB
为1024 × 1024字节,而磁盘规格中的1MB通常意味着1,000,000字节。[mysqld] innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Gnewraw
重新启动服务器。
InnoDB
注意到newraw
关键字并初始化新分区。但是,不要创建或更改任何InnoDB
表。否则,下次重新启动服务器时,InnoDB
重新初始化分区,您的更改将丢失。(作为安全措施InnoDB
防止用户修改数据时,任何分区newraw
指定)。后
InnoDB
已初始化新分区,停止服务器,更改newraw
在数据文件规范中生
:[mysqld] innodb_data_home_dir= innodb_data_file_path=/dev/hdd1:3Graw
重新启动服务器。
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
在数据文件规范中生
:[mysqld] innodb_data_home_dir= innodb_data_file_path=//./D::10Graw . [mysqld] innodb_data_home_dir= innodb_data_file_path=//
重新启动服务器。
InnoDB
现在允许进行更改。