我可以安全地切换到 Innodb file-per-table 并删除 ibdata1 吗?这是我的进攻计划。我最近备份了所有数据。
- 我将 innodb_file_per_table=1 添加到 /etc/my.cnf,然后重新启动
- 我跑了 ALTER tablename ENGINE=InnoDB; 在每个 Innodb 表上
接下来,我想:
- 停止 MySQL
- 删除 ibdata1、ib_logfile0、ib_logfile1
- 启动 MySQL
这行得通吗?
根据文档:
启用多个表空间后,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,因为仅启用该选项不会移动您现有的数据。