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 不适用,因为所有表的数据都在共享的表空间文件中。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作