RSS订阅 | TAGS | 工具箱 | 繁體

代码 MYSQL

当前位置:奔牛网>数据库>MYSQL>把MySql数据库中的MyISAM引擎表转换为InnoDB引擎

把MySql数据库中的MyISAM引擎表转换为InnoDB引擎

时间:2011-10-25 | 来源:互联网 |作者:loc |阅读:|

MySQL中的MyISAM和InnoDB有什么区别,在这儿就不哆嗦了。一个好比便利店,一个好比大型购物中心,他们是为了适应不同的场合而存在的。当流量比较小,我们可以用MyISAM,当流量大时,我们可能会把数据库中的,全部表或者部分表转换成InnoDB。下面说2种切实可行的方法来完成这种转换。
 
1、转换单个表:
  内容来自bnxb.com


ALTER TABLE 数据表 TYPE=InnoDB;
 

内容来自bnxb.com

2、批量转换多个表:

奔牛网Bnxb.com

\! rm -f /tmp/admpub_com_alter.sql #预删除临时文件,方式下面的语句无法写入
 
 
SELECT concat('alter table `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` engine=innodb;')
FROM information_schema.TABLES
WHERE ENGINE='Myisam' AND
       TABLE_SCHEMA<>'mysql' AND
       TABLE_SCHEMA<>'information_schema'
INTO OUTFILE '/tmp/admpub_com_alter.sql' ;
 
source /tmp/admpub_com_alter.sql
 
\! rm -f /tmp/admpub_com_alter.sql #执行完后删除临时文件
 

本文来自奔牛网Bnxb.com

在大表的转换中,你应该增加InnoDB缓冲池的大小来减少磁盘I/O。尽管如此,不要使用超过80%的内部内存。你也可以增加InnoDB日志文件和日志文件的大小。

www.bnxb.com

确信你没有填满表空间:InnoDB表比MyISAM表需要大得多的磁盘空间。如果一个ALTER TABLE耗尽了空间,它就开始一个回滚,并且如果它是磁盘绑定的,回滚可能要几个小时。对于插入,InnoDB使用插入缓冲区来以成批地合并第二个索引记录到索引中。那样节省了大量磁盘I/O。在回滚中,没有使用这样的机制,而回滚要花比插入长30倍的时间来完成。 bnxb.com

在失控的回滚情况下,如果你在数据库中没有有价值的数据,比较明智的是杀掉数据库进程而不是等几百万个磁盘I/O被完成。

奔牛网Bnxb.com

(0)
(0)
最新评论