14.4 InnoDB Tablespace Management InnoDB 表空间管理

时间:2021-03-26 07:32:51

14.4 InnoDB Tablespace Management InnoDB 表空间管理:

14.4.1 Resizing the InnoDB System Tablespace
14.4.2 Changing the Number or Size of InnoDB Redo Log Files
14.4.3 Using Raw Disk Partitions for the System Tablespace
14.4.4 InnoDB File-Per-Table Tablespaces
14.4.5 Creating a File-Per-Table Tablespace Outside the Data Directory
14.4.6 Copying File-Per-Table Tablespaces to Another Server
14.4.7 Storing InnoDB Undo Logs in Separate Tablespaces

14.4.1 Resizing the InnoDB System Tablespace 调整System 表空间大小

这个章节描述如何增加或者减少InnoDB 系统表空间的大小

Increasing the Size of the InnoDB System Tablespace

早期的方式增加InnoDB 系统表空间的大小是配置它从开始就被自动扩展

指定autoextend 属性用于最后一个数据文件在表空间定义,然后InnoDB 增加 文件的大小自动的按8MB

增长 当它空间不足时,增加的大小可以通过设置innodb_autoextend_increment来改变,单位是MB

mysql> show variables like ‘%innodb_autoextend_increment%’;
+—————————–+——-+
| Variable_name | Value |
+—————————–+——-+
| innodb_autoextend_increment | 64 |
+—————————–+——-+
1 row in set (0.00 sec)

你可以通过扩大 system tablespace 通过一个一个定义的总量通过增加另外一个数据文件:

1.关闭MySQL server

  1. 如果之前的最后一个文件是被定义关键字自动增长,改变它的定义使用固定大小,

基于实际增长的大小。检查数据文件的大小, 降低到接近1MB的倍数。

3.增加一个新的数据文件到 innodb_data_file_path的尾部,可以让文件自动扩展。

只有 在innodb_data_file_path最后一个文件可以自动扩展

mysql> show variables like ‘%innodb_data_file_path%’;
+———————–+————————+
| Variable_name | Value |
+———————–+————————+
| innodb_data_file_path | ibdata1:12M:autoextend |
+———————–+————————+
1 row in set (0.01 sec)

4.启动MySQL server

比如, 这个表空间只有一个自动增长的文件ibdata1

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

假设这个数据文件,随着时间的推移,已经增长到988MB. 这里有个配置行在修改原始的数据文件后使用一个固定的大小

增加一个新的 auto-extending data file:

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

当你添加一个新的数据文件到system 表空间配置,确保文件不引用现在的文件,InnoDB创建和初始化文件当你重启server

的时候。

Decreasing the Size of the InnoDB System Tablespace 减少InnoDB System表空间的大小

你可以从system 表空间删除一个数据文件,来减少系统表空间大小,使用这个过程。

1.使用mysqldump 来备份所有的InnoDB表,包括InnoDB 表位于MySQL database,

在5.6版本,有5个InnoDB 表包含在MySQL database数据库。

mysql> select table_name from information_schema.tables where table_schema=’mysql’ and engine=’InnoDB’;
+———————-+
| table_name |
+———————-+
| innodb_index_stats |
| innodb_table_stats |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
+———————-+
5 rows in set (0.00 sec)

2.停止server

3.删除所有存在的表空间文件(*.ibd), 包含ibdata和ib_log files.

不要忘记删除*.ibd 文件 在MySQL数据库里的

4.删除任何.frm文件