介绍如何增大或减小InnoDB系统表空间的大小 。
增加InnoDB系统空间最简单的方法就是,在配置文件中配置autoextend 每次自动扩展的增量大小由参数 innodb_autoextend_increment 控制,单位为’M’。
mysql> show variables like 'innodb_autoextend_increment'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------+ | innodb_autoextend_increment | 64 | +-----------------------------+-------+该 innodb_autoextend_increment 设置不会影响 每个表的单独表空间文件或常规表空间文件。无论innodb_autoextend_increment设置如何,这些文件都是自动扩展的 。初始扩展是少量的,之后以4MB的增量扩展。 设置自动扩展示例:
innodb_data_file_path = ibdata1:1G:autoextend增加数据文件扩展系统表空间 1. 关闭MySQL服务器
如果最后一个数据文件上有关键字autoextend,请根据实际大小将其改成固定大小。
添加新数据文件到末尾,可以选择使用自动扩展。但是只能将最后一个数据文件指定为自动扩展。 如下面错误示例:
innodb_data_file_path = ibdata1:1G:autoextend;ibdata2:10M:autoextend 查看log-error日志 2018-08-09T06:22:11.781320Z 0 [ERROR] InnoDB: syntax error in file path or size specified is less than 1 megabyte 2018-08-09T06:22:11.781352Z 0 [ERROR] InnoDB: Unable to parse innodb_data_file_path=ibdata1:1G:autoextend;ibdata2:10M:autoextend 2018-08-09T06:22:11.781357Z 0 [ERROR] Plugin 'InnoDB' init function returned error. 2018-08-09T06:22:11.781361Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 2018-08-09T06:22:11.781364Z 0 [ERROR] Failed to initialize builtin plugins. 2018-08-09T06:22:11.781367Z 0 [ERROR] Aborting正确示例:
innodb_data_file_path = ibdata1:1G;ibdata2:10M:autoextend 再次启动MySQL服务器 2018-08-09T06:28:37.355696Z 0 [Note] InnoDB: Need to create a new innodb_system data file 'ibdata2'. 2018-08-09T06:28:37.355778Z 0 [Note] InnoDB: Setting file './ibdata2' size to 10 MB. Physically writing the file full; Please wait ... 2018-08-09T06:28:37.491906Z 0 [Note] InnoDB: File './ibdata2' size is now 10 MB. mysql> show variables like 'innodb_data_%'; +-----------------------+-----------------------------------+ | Variable_name | Value | +-----------------------+-----------------------------------+ | innodb_data_file_path | ibdata1:1G;ibdata2:10M:autoextend | | innodb_data_home_dir | | +-----------------------+-----------------------------------+【注意】:添加新数据文件时,请确保文件名不引用现有文件。否则InnoDB重新启动服务器时创建并初始化文件。
无法从系统表空间中删除数据文件。要减小系统表空间大小,请使用以下过程:
1)使用mysqldump转储所有 InnoDB表,包括位于mysql schema 中的InnoDB表 mysql> SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='mysql' and ENGINE='InnoDB'; +---------------------------+ | TABLE_NAME | +---------------------------+ | engine_cost | | gtid_executed | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | plugin | | server_cost | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | +---------------------------+ 19 rows in set (0.00 sec)2)停止服务器
3)删除所有现有的表空间文件(*.ibd),包括ibdata和ib_log文件。不要忘记删除位于mysql schema中的表的*.ibd文件。
4)删除InnoDB表的所有.frm文件 。
5)配置新的表空间
6)重启服务器
7)导入转储文件。
注意
如果数据库仅使用InnoDB引擎,则dump所有数据库,停止服务器,删除所有数据库和InnoDB日志文件,重新启动服务器以及导入dump文件可能更简单。
转载于:https://www.cnblogs.com/wanbin/p/9514651.html
