目前我有一个 MySQL 服务器innodb_file_per_table = 0
基于许多因素,对我来说将其更改为innodb_file_per_table = 1
我知道要使这一切正常进行,我需要
- 使用 mysqldump 将所有数据库导出到单个文件中
- 关闭mysql
- 更改
innodb_file_per_table
设置 - 重启mysql
- 导入每个数据库
问题是,我可以执行以下操作吗
第 1 天
- 关闭mysql
- 更改
innodb_file_per_table
设置 - 重启mysql
- 导出一些数据库
- 将这些数据库重新导入 mysql
第 2 天
- 导出一些数据库
- 将这些数据库重新导入 mysql
直到我导出了重新导入的所有数据库?
我假设在过渡期间,一些数据库将继续使用 ibdata1 文件,而导出和重新导入的数据库将使用它们自己的数据存储。混合使用数据存储会导致问题,还是我可以进行分阶段过渡?
老实说,除非您有要解决的特定问题,否则我不会打扰。
它可以通过以下方式更简单:
ALTER TABLE xxx FORCE
对于每张桌子抱歉,我没有关于何时以
innodb_file_per_table
不同方式设置的参考。以下是一些提示:注意: 的值
innodb_file_per_table
仅适用于后续或CREATE TABLEs
表重建。[也许是打开它的主要原因:] 当你有一个“大”表时
ALTERed
,或者你可能会进行大量删除等操作,建议在 file_per_table 为 ON 的情况下构建表。这允许操作替换仅包含该表的 .ibd 文件。因此,如果该操作显着缩小了表,则释放的额外空间将返回给操作系统。也就是说,将可用空间返回给操作系统的唯一简单方法是打开 file_per_table 并执行一些重建表的操作。
file_per_table = OFF对于将保持较小的“小”表稍微好一些。这是因为许多表共享一个文件描述符(for
ibdata1
)。要更改表的 file_per_table 需要 (1) 设置标志和 (2) 重建表(例如,简单地
ALTER TABLE t ENGINE=InnoDB;
;它可能需要FORCE
)。之后,考虑将设置更改回来。ibdata1
当磁盘空间紧张时,通过在(可能有很多可用空间)和单独的 .ibd 文件之间移动选定的表可能有助于玩游戏。将文件移出ibdata1 会留下一堆可用空间。此空间最终可能会被
INSERTs
ibdata1 中的表和其他操作使用。转储和完整性不受 ibdata1 与 .ibd 的影响。
大多数服务器不应该担心设置。
[一个相关主题:]
OPTIMIZE TABLE
对于 InnoDB 表来说基本上是不需要的。