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

5
这个问题可能是给那些已经完成此类迁移的MySQL专家和管理员的。我有17个使用MyISAM存储引擎的MySQL表、触发器和存储过程。这些表的数据总共约为8 MiB。由于我要将应用程序和数据库迁移到Amazon EC2和RDS,我想知道在从MyISAM迁移到InnoDB时需要考虑哪些关键因素。
我将执行以下步骤:
1. AWS RDS上的系统表必须使用MyISAM,因此不需要争论。
2. 创建17个与现有MyISAM相同结构的表并在RDS InnoDB中构建它们。
3. 从MyISAM表中导出数据并将其导入到在RDS InnoDB上创建的新表中。
4. 在InnoDB数据库中创建触发器、存储过程和函数。
当我询问像这样跨MySQL存储引擎进行迁移的关键注意事项时,我想知道有没有什么需要特别注意的地方,以便在数据迁移等方面DB的行为符合预期且没有任何故障。我主要担心的是,我读到了InnoDB和MyISAM的缓冲、I/O、CPU和内存使用方式不同。
我很高兴听取您对此过程的意见。
谢谢。
*更新*
innodb_buffer_pool_size - {DBInstanceClassMemory*3/4} 目前已经设置为这个值。
我正在寻找其他参数。如果您想查看任何其他特定参数的值,请告诉我。
3个回答

2
在MyISAM和InnoDB之间有许多不同之处,但在迁移之前您应该知道的主要要点如下: 1. 数据备份不能像MyISAM一样简单地通过复制文件来完成。 2. 使用默认选项运行时,InnoDB无法以优化的方式工作,您需要根据自己的需求进行配置和调整。 3. InnoDB没有像MyISAM那样的压缩索引,因此它需要更多的空间。 4. InnoDB会自动将主键列添加到辅助键中,因此请确保主键列不是很大。
除此之外,迁移应该很容易: 1. 创建与MyISAM类似结构的表,但只更改引擎为InnoDB。 2. 从MyISAM表中转储数据。 3. 按主键顺序在InnoDB引擎中导入数据,在START TRANSACTION和COMMIT之间包装导入是最快的方法。 4. 创建存储过程和触发器,但它们与存储引擎无关。
如果您需要任何关于InnoDB配置的帮助,请告诉我。

你推荐在RDS中设置哪些InnoDB参数或配置值以使其性能有效?谢谢。我正在按照步骤进行。 - Aakash

1
如果您想将当前的表转换为INNODB,以下是简单的方法:
ALTER TABLE t1 ENGINE = InnoDB;

请查看MySQL文档

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

InnoDB引擎有很多不同的地方,但我相信花几分钟使用您喜欢的搜索引擎就可以找到答案。


这个有效...我尝试在我的服务器上更改MyISAM表的引擎,它确实发生了变化。我想了解当执行此引擎alter table脚本时,表和数据实际发生了哪些变化...正在阅读更多相关信息!谢谢。 - Aakash
你可以享受到InnoDB的所有乐趣(行级锁定等),也会遇到所有烦恼(没有count(*)等)。 - Alain Collins

0

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

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

在必要的情况下添加提交和回滚。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接