我有一台专门用于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
更换发动机类型时还需要考虑什么?
ALTER TABLE tablename ORDER BY primary_key_column;
然后,运行 alter 命令:
ALTER TABLE tablename ENGINE = INNODB;
如果表格非常大,那么这可能需要一些时间,而且会占用大量CPU资源...
首先检查您的数据库是否支持InnoDB引擎(我敢打赌它是支持的 ;)):
SHOW ENGINES\G
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 ...
相比,这通常值得你花费的时间(和痛苦)。