将表类型更改为InnoDB

7

我有一台专门用于MyISAM的32GB RAM MySQL服务器,正在使用默认配置运行。我想将一个表的引擎类型更改为InnoDB,以避免表锁定。它有5000万条记录,磁盘大小约为15GB。我正在使用MySQL版本5.5。

我猜我需要添加以下选项并重新启动MySQL。

innodb_buffer_pool_size=1G
innodb_log_file_size=100M
innodb_file_per_table=1

更换发动机类型时还需要考虑什么?
2个回答

18
你实际上需要运行一个命令来转换每个表格。
先对表格进行排序可以使操作速度更快:
ALTER TABLE tablename ORDER BY primary_key_column;

然后,运行 alter 命令:

ALTER TABLE tablename ENGINE = INNODB;

如果表格非常大,那么这可能需要一些时间,而且会占用大量CPU资源...


我的问题是关于需要对my.cnf配置文件进行哪些更改,因为当前的cnf文件没有任何与innodb相关的参数。 - shantanuo
下面的解决方案建议使用“SHOW ENGINES”命令,它会告诉你是否需要进一步更改my.cnf文件。如果需要更改,请确保注释掉“skip-innodb”选项。记得要优雅地重启你的MySQL引擎。 - Jonathan Barlow
在这种情况下,InnoDB将运行默认设置。我的问题是关于需要更改哪些默认设置。或者长期使用默认设置是否可以正常工作?我已经列出了最重要的3个参数,我只是想了解更多信息。 - shantanuo

7

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

SHOW ENGINES\G

如果是这样的话,已经有默认的与innodb相关的参数了,请使用以下命令检查:
SHOW VARIABLES LIKE '%innodb%'

尝试理解它们并根据您的特定需求进行修改。即使您使用默认参数,现在也可以开始使用InnoDB表。

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

顺便说一下,将表转换为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 ...相比,这通常值得你花费的时间(和痛苦)。


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