page contents

MySQL InnoDB引擎类型的表有哪两类表空间模式?它们各有什么优缺点?

轩辕小不懂 发布于 2022-03-18 14:53
阅读 446
收藏 0
分类:数据库
3322
Nen
Nen
- 程序员

InnoDB存储表和索引有以下两种方式:
1)使用共享表空间存储,这种方式创建的表结构保存在.frm文件中。Innodb的所有数据和索引保存在一个单独的表空间(由参数innodb_data_home_dir和innodb_data_file_path定义,若innodb_data_home_dir为空,则默认存放在datadir下,初始化大小为10M)里,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。

2)使用独立表空间(多表空间)存储,这种方式创建的表结构仍然保存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中。如果是个分区表,那么每个分区对应单独的.ibd文件,文件名是“表名+分区名”,可以在创建分区的时候指定每个分区数据文件的位置,以此来将表的I/O均匀分布在多个磁盘上。

如果要使用独立表空间的存储方式,那么需要设置参数innodb_file_per_table为ON,并且重新启动服务后才可以生效。修改innodb_file_per_table的参数值即可修改数据库的默认表空间管理方式,但是修改不会影响之前已经使用过的共享表空间和独立表空间。ON代表独立表空间管理,OFF代表共享表空间管理。若要查看单表的表空间管理方式,则需要查看每个表是否有单独的数据文件。该参数从MySQL 5.6.6开始默认为ON(之前的版本均为OFF),表示默认为独立表空间管理。

独立表空间的数据文件没有大小限制,不需要设置初始大小,也不需要设置文件的最大限制、扩展大小等参数对于使用多表空间特性的表,可以比较方便地进行单表备份和恢复操作,但是直接复制.ibd文件是不行的,因为没有共享表空间的数据字典信息,直接复制的.ibd文件和.frm文件恢复时是不能被正确识别的,但可以通过命令:“ALTER TABLE tb_name DISCARD TABLESPACE;”和“ALTER TABLEtb_name IMPORT TABLESPACE;”将备份恢复到数据库中,但是这样的单表备份,只能恢复到表原来所在的数据库中,而不能恢复到其他的数据库中。如果要将单表恢复到目标数据库,那么需要通过mysqldump和mysqlimport来实现。

需要注意的是,即便在独立表空间的存储方式下,共享表空间仍然是必需的。InnoDB会把内部数据字典、在线重做日志、Undo信息、插入缓冲索引页、二次写缓冲(Double write buffer)等内容放在这个文件中。

请先 登录 后评论