基本概念
InnoDB 存储引擎可将所有数据存放于 ibdata* 的共享表空间,也可将每张表存放于独立的 .ibd 文件的独立表空间。共享表空间以及独立表空间都是针对数据的存储方式而言的。
共享表空间:  某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data 目录下, 默认的文件名为 ibdata1,初始化为 10M。
独立表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个 .frm 表描述文件,还有一个 .ibd 文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
优缺点
共享表空间
优点:可以将表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上),数据和文件放在一起方便管理。
缺点:所有的数据和索引存放到一个文件中,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析这类应用最不适合用共享表空间。
独立表空间:在配置文件(my.cnf)中设置 innodb_file_per_table
优点:
- 每个表都有自已独立的表空间。
- 每个表的数据和索引都会存在自已的表空间中。
- 可以实现单表在不同的数据库中移动。
- 空间可以回收(除 drop table 操作处,表空不能自已回收)。
缺点
- 单表增加过大,如超过100G。
- 相比较之下,使用独占表空间的效率以及性能会更高一点。
参数详解
| Command-Line Format | --innodb_file_per_table | |
|---|---|---|
| System Variable | Name | innodb_file_per_table | 
| Variable Scope | Global | |
| Dynamic Variable | Yes | |
| Permitted Values (<= 5.6.5) | Type | boolean | 
| Default | OFF | |
| Permitted Values (>= 5.6.6) | Type | boolean | 
| Default | ON | 
修改 InnoDB 数据存储方式:
| 1 | mysql> set global innodb_file_per_table =ON; | 
想要将共享表空间转化为独立表空间有两种方法:
- 先逻辑备份,然后修改配置文件 - my.cnf中的参数- innodb_file_per_table参数为- 1,重启服务后将逻辑备份导入即可。
- 修改配置文件 - my.cnf中的参数- innodb_file_per_table参数为- 1,重启服务后将需要修改的所有- innodb表都执行一遍:- alter table table_name engine=innodb;使用第二种方式修改后,原来库中的表中的数据会继续存放于- ibdata1中,新建的表才会使用独立表空间。
操作实战
| 1 | # 导出所有数据 |