我有一个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
更改引擎类型时还需要哪些其他内容?
答案 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 ...
相比,它通常值得节省时间(和痛苦)。