mysql修改表的存储引擎

将表从一个引擎改为另一个引擎的方法

方法1:

最简单的方法

alter table test engine=innodb;

但是如果表数据量大,则需要执行很长时间。因为mysql会按行将数据从原表复制到新表,在复制期间可能会消耗系统所有的IO,同时原表上会加读锁,所以业务繁忙的表要小心该操作。

方法2:

一种解决方案是使用导出导入
- 使用mysqldump导出文件
- 修改文件中的create table语句的存储引擎选项,同时修改表名(注意:mysqldump会在create table前加上drop table语句,不注意可能导致数据丢失)
- 导入文件
-

方法3:

先创建新存储引擎的表,然后使用insert。。。select语法导数据

数据量不大时:

mysql> create table test_innodb like test_myisam;
mysql> alter table test_innodb engine=innodb;
mysql> insert into test_innodb select * from test_myisam;

数据量大时,可以分批处理,避免大事务产生过多的undo

mysql>start transaction;
mysql>insert into test_innodb select * from test_myisam where id between a and b;
mysql>commit;

方法4:

使用percona toolkit提供的pt_online-schema-change的工具实现在线schema变更

# pt-online-schema-change -u root -p beijing --alter "ENGINE=MyISAM" --execute D=miles,t=actor 

该工具详细使用方式请参考
https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值