1

我可以安全地切换到 Innodb file-per-table 并删除 ibdata1 吗?这是我的进攻计划。我最近备份了所有数据。

  1. 我将 innodb_file_per_table=1 添加到 /etc/my.cnf,然后重新启动
  2. 我跑了 ALTER tablename ENGINE=InnoDB; 在每个 Innodb 表上

接下来,我想:

  1. 停止 MySQL
  2. 删除 ibdata1、ib_logfile0、ib_logfile1
  3. 启动 MySQL

这行得通吗?

4

1 回答 1

2

根据文档

启用多个表空间后,InnoDB 将每个新创建的表存储在相应数据库目录中自己的 tbl_name.ibd 文件中。与 MyISAM 存储引擎不同,它具有单独的 tbl_name.MYD 和 tbl_name.MYI 文件用于索引和数据,InnoDB 将数据和索引一起存储在单个 .ibd 文件中。tbl_name.frm 文件仍照常创建。

如果从 my.cnf 中删除 innodb_file_per_table 行并重新启动服务器,InnoDB 会在共享表空间文件中创建任何新表。

无论 file-per-table 设置如何,您始终可以访问系统表空间中的两个表和它们自己的表空间中的表。

您的问题的答案:不,您不能删除 ibdata1、ib_logfile0 或 ib_logfile1,因为仅启用该选项不会移动您现有的数据。

于 2012-09-22T23:42:35.200 回答