将表从一个引擎改为另一个引擎的方法
最简单的方法
但是如果表数据量大,则需要执行很长时间。因为mysql会按行将数据从原表复制到新表,在复制期间可能会消耗系统所有的IO,同时原表上会加读锁,所以业务繁忙的表要小心该操作。
一种解决方案是使用导出导入
- 使用mysqldump导出文件
- 修改文件中的create table语句的存储引擎选项,同时修改表名(注意:mysqldump会在create table前加上drop table语句,不注意可能导致数据丢失)
- 导入文件
-
先创建新存储引擎的表,然后使用insert。。。select语法导数据
数据量不大时:
数据量大时,可以分批处理,避免大事务产生过多的undo
使用percona toolkit提供的pt_online-schema-change的工具实现在线schema变更
该工具详细使用方式请参考
<a href="https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html">https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html</a>