将表类型更改为InnoDB

时间:2012-04-06 04:40:27

标签: mysql innodb

我有一个myisam专用的32 GB RAM mysql服务器,运行在默认配置上。我想将引擎类型更改为一个表的InnoDB,以避免表锁。它拥有5000万条记录,磁盘大小约为15 GB。我使用的是mysql 5.5版 我想我需要添加以下选项并重新启动mysql。

innodb_buffer_pool_size=1G
innodb_log_file_size=100M
innodb_file_per_table=1

更改引擎类型时还需要哪些其他内容?

2 个答案:

答案 0 :(得分:15)

您实际上将运行一个命令来转换每个表。

首先对表格进行排序会更快:

ALTER TABLE tablename ORDER BY primary_key_column;

然后,运行alter命令:

ALTER TABLE tablename ENGINE = INNODB;

如果表格非常大,可能需要一段时间,而且它会使用很多CPU ....

答案 1 :(得分:7)

首先检查你的数据库是否支持InnoDB引擎(我敢打赌它是支持的;)):

SHOW ENGINES\G

如果是这样,已经有默认innodb related parameters,请用以下方法检查:

SHOW VARIABLES LIKE '%innodb%'

并尝试了解它们并根据您的具体需求进行更改。即使您使用默认参数,现在可以使用InnoDB表进行循环播放。

如果您只想创建InnoDB表,您可以使用 default-storage-engine 选项更改默认存储引擎,使用当前会话:SET storage_engine=INNODB;或配置。

顺便说一句,将表转换为InnoDB的最快方法不是上述方法。通过简单地插入数据,可以执行以下操作将表转换为InnoDB:

CREATE TABE new AS SELECT * FROM old WHERE 1<>1;
ALTER TABLE new ENGINE = INNODB;
INSERT INTO new SELECT * FROM old;

当然,您必须手动添加所需的索引,但与较大的表格上的ALTER TABLE ...相比,它通常值得节省时间(和痛苦)。