我有一个带有一个 ibdata 文件的 innodb。我已在 my.cnf 中将其更改为每个表都有 ibd 文件(innodb_file_per_table)。然后,我在所有 innodb 表上运行以下查询以使其拥有自己的 ibd 文件
改变表表名引擎=innodb;
现在,在转换所有表之后,ibdata 仍然具有相同的大小,因此我已将其删除,然后重新启动 mysql。mysql 已再次创建了它,大小为 10MB(如 my.cnf 中所定义),但现在的问题是,当显示表格; 但每当我想描述表名或者从表名中选择 *我收到此错误信息
mysql> 描述员工; 错误 1286(42000):未知表引擎“InnoDB”
以及显示引擎我在列表中看不到 innodb!!
我还尝试删除 ib_logfile0 和 ib_logfile1,但收到了另一条消息
错误 1146 (42S02):表“DBNAME.TableName”不存在
我知道我应该使用 mysqldump 并恢复,但这就是我所做的 :(,有人知道如何删除 ibdata1 文件并保持 innodb 引擎启用吗?谢谢
答案1
即使设置了 innodb_file_per_table,ibdata* 仍然存储有关表的关键(元)数据,您不应该销毁它。我担心您的数据会丢失,除非有办法从 idb 文件中提取它们并在重建 ibdata* 文件后恢复它们。
所有元数据仍驻留在 ibdata1 中,这是绝对无法避免的。重做日志和 MVCC 数据也仍与 ibdata1 共存。
答案2
停止mysql,删除innodb日志文件,启动mysql