将数据从myisam复制到innodb

时间:2011-11-18 11:27:08

标签: mysql database innodb myisam

我目前有一个基于MYISAM存储引擎的数据库,它有几千条记录。我想将我的数据库转换为InnoDb存储引擎。

它不是一个简单的ALTER存储引擎命令,因为我需要在将其转换为InnoDb之前将外键添加到当前数据库模式(当前MyISAM数据库模式确实有主键)。

我的问题是,一旦我将数据库转换为InnoDb,将数据从当前MYISAM引擎恢复到InnoDb引擎就像启动PhpMyAdmin实例并备份数据(减去数据库模式或结构)一样简单恢复到Innodb引擎?

这样做有什么潜在的障碍?

这是解决此问题的正确方法吗?还有其他各种更简单或更好的方法来恢复数据?

3 个答案:

答案 0 :(得分:2)

  

它不是一个简单的ALTER存储引擎命令,因为我需要将外键添加到当前数据库模式

为什么不呢?当然首先备份数据,这总是一个好主意,但是你不需要转储和恢复数据,你可以发出简单的ALTER TABLE,例如:

ALTER TABLE `tablename` ENGINE = InnoDB;

之后,您可以添加任何索引和外键。如果任何新外键失败,您需要修复数据并重试。

答案 1 :(得分:0)

首先添加外键时,必须按特定顺序复制数据,否则由于外键限制而无法添加数据。 因此,最好的方法是检查(通过SQL查询)是否可以使用当前数据集实现外键约束,然后复制数据,然后定义外键。 但是如果您使用PHPMyAdmin从InnoDB数据库导出数据,则订单已经完成,您可以毫无问题地重新导入它。

答案 2 :(得分:0)

您可以稍后添加外键

  1. 更改表格以使用新引擎

  2. 更改每个表以使用外键

  3. 我只看到一个问题,那就是如果外键被打破就开始了。