我有InnoDB引擎上的MySQL数据库。 但服务器configuration为只使用一个文件ibdata0,而不使用参数innodb_file_per_table。 我想改变这个没有转储,并在重新configuration的服务器上恢复它。 所以我的计划是在my.cnf重启服务器上添加参数innodb_file_per_table ,并用ALTER TABLE强制重build所有的InnoDB表。
做ALTER TABLE tablename ENGINE = InnoDB应该为我的/val/lib/mysql/mydatabase目录中的每个.frm文件创build.idb文件,它确实(我想从ibdata文件移动数据)。 但是,当我closures服务器,并删除旧ibdata文件,我看到所有的表( SHOW TABLES ),但如果我在他们做任何SELECT我得到这个错误:
ERROR 1146 (42S02): Table 'mytable' doesn't exist
所以我想有一些数据保留在旧的ibdata文件中。
我省略了什么? 有没有办法做我想做的事情?
不,你将不得不做一个转储和恢复。 即使在执行alter table engine技巧之后,一些数据仍将保留在ibdata1文件中。
我自己遇到这个问题,并倾销所有表,然后重新导入它们,而不closuresMySQL不起作用。 在删除ibdata1文件之前,所有的innodb表必须已经删除。