将MySQL表和数据从存储引擎MyISAM移动到InnoDB

时间:2011-06-02 18:42:10

标签: mysql innodb myisam

此问题可能适用于之前已完成此类迁移的MySQL专家和管理员。

我在MyISAM存储引擎上有17个MySQL表,触发器和存储过程。这些表共有大约8个MiB数据。由于我正在将应用程序和数据库移动到Amazon EC2和RDS,因此我想知道将表从MyISAM迁移到InnoDB时的关键考虑因素。

我将要完成的步骤大致如下。

  1. AWS RDS上的系统表必须在MyISAM上,因此无需参加竞赛。
  2. 创建17个表,其结构与MyISAM上的结构相同,并在RDS InnoDB中构建。
  3. 从MyISAM表导出数据并将其导入到InnoDB上的RDS中创建的新表中。
  4. 在InnoDB数据库中创建触发器,存储过程和函数。
  5. 当我在MySQL存储引擎中询问有关此类迁移的关键注意事项时,我想从有经验的管理员的角度来了解,如果在数据迁移期间明确需要在数据库级别处理某些事情,那么数据库的行为应该如此,并且没有故障。我担心的主要是因为我读到InnoDB和MyISAM的缓冲方式,I / O,CPU和内存使用方式不同。

    我很乐意在这个过程中接受你的2美分。

    感谢。

    *的 更新 *

    innodb_buffer_pool_size - {DBInstanceClassMemory * 3/4}这就是它现在设置的内容。

    我也在寻找其他参数。如果您想查看为任何其他特定参数设置的值,请​​与我们联系。

3 个答案:

答案 0 :(得分:2)

MyISAM和InnoDB之间存在许多差异,但在迁移之前应注意哪些要点。 1.只需像在MyISAM中那样复制文件,就无法完成数据备份 2.当使用默认选项运行时,InnoDB无法以优化的方式工作,您必须根据需要进行配置和调整。 3. InnoDB没有像MyISAM这样的压缩索引,所以它会占用更多空间 4. InnoDB自动将主键列附加到辅助键。所以确保主键列不大。

除了迁移应该很容易。 1.创建具有与MyISAM类似结构的表,但仅将引擎更改为InnoDB。 2.转储MyISAM表中的数据 3.在InnoDB引擎中以主键顺序导入数据,包含START TRANSACTION和COMMIT之间的导入,这是加载数据的最快方法。 4.创建存储过程并触发。但它们与存储引擎无关。

如果您需要有关InnoDB配置的任何帮助,可以告诉我。

答案 1 :(得分:1)

如果您想将当前表格转换为INNODB,可以采用以下方法:

ALTER TABLE t1 ENGINE = InnoDB;

请参阅MySQL doc

在您进入云端之前在自己的服务器上执行此操作是一个好主意 - 不要同时更改两个参数!

InnoDB引擎中有很多不同的东西,但我确信用你最喜欢的搜索引擎几分钟就能告诉你。

答案 2 :(得分:0)

迁移过程本身非常简单。转储将记录需要重建的所有必要对象。您只需要删除(或更改,如果默认不是您想要的),存储引擎子句。您可能需要担心的是,为MyISAM编写的应用程序可能假设永远不需要提交事务。所以,无论如何,几年前我逃脱了这个:

mysqldump --all-databases | perl -pwe 's/\) TYPE=MyISAM/\)/' >dump.sql
mysql <dump.sql

在必要时添加提交和回滚。