MySQL是discard/import tablespace能否使用在统一表空间中
DISCARD TABLESPACE
和 IMPORT TABLESPACE
对于独立表空间(每个表都有自己的 .ibd
文件)特别有用,但当使用统一表空间(称为共享表空间,顾名思义,共享表空间中所有表的数据存储在共享的表空间文件中)时,这两个命令的适用性会有所不同。
独立表空间 (innodb_file_per_table=ON
):
.ibd
文件。DISCARD TABLESPACE
和 IMPORT TABLESPACE
操作来手动管理 .ibd
文件。统一表空间 (innodb_file_per_table=OFF
):
ibdata1
等文件)。在启用了独立表空间的情况下,通过 innodb_file_per_table
设置,每个 InnoDB 表会有独立的 .ibd
文件,以下是 DISCARD TABLESPACE
和 IMPORT TABLESPACE
的用途和操作流程:
在原始服务器上 DISCARD TABLESPACE
:
ALTER TABLE world.city DISCARD TABLESPACE;
复制 .ibd
文件:
将 world.city
表的 .ibd
文件从原始服务器复制到目标服务器的相应目录中。
在目标服务器上 IMPORT TABLESPACE
:
ALTER TABLE world.city IMPORT TABLESPACE;
DISCARD TABLESPACE
将会删除该表在 MySQL 数据库和文件系统上的所有内容,但会保留表定义(.frm 文件)。对于统一表空间情况(即 innodb_file_per_table=OFF
),由于所有表的数据都存储在共享的表空间文件中,DISCARD TABLESPACE
和 IMPORT TABLESPACE
通常不适用。例如,假设你没有启用独立表空间,以下操作将不能正常工作:
ALTER TABLE world.city DISCARD TABLESPACE;
ALTER TABLE world.city IMPORT TABLESPACE;
这些命令依赖于独立 .ibd
文件的存在。如果 innodb_file_per_table
设置为 OFF
,InnoDB 报错指出无法找到表的独立表空间文件。
innodb_file_per_table=ON
):可以使用 DISCARD TABLESPACE
和 IMPORT TABLESPACE
来管理和迁移单个表的表空间文件。innodb_file_per_table=OFF
):DISCARD TABLESPACE
和 IMPORT TABLESPACE
不适用,因为所有表的数据都在共享的表空间文件中。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作