我有一个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
Run Code Online (Sandbox Code Playgroud)
在改变发动机类型时还需要什么?
Jon*_*low 16
您实际上将运行一个命令来转换每个表.
首先对表格进行排序会更快:
ALTER TABLE tablename ORDER BY primary_key_column;
Run Code Online (Sandbox Code Playgroud)
然后,运行alter命令:
ALTER TABLE tablename ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)
如果表格真的很大,可能需要一段时间,它会占用你的很多CPU ....
首先检查你的数据库是否支持InnoDB引擎(我敢打赌它是支持的;)):
SHOW ENGINES\G
Run Code Online (Sandbox Code Playgroud)
如果是这样,已经有默认的innodb相关参数,请检查:
SHOW VARIABLES LIKE '%innodb%'
Run Code Online (Sandbox Code Playgroud)
并尝试了解它们并根据您的具体需求进行改变.即使您使用默认参数,现在可以使用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;
Run Code Online (Sandbox Code Playgroud)
当然,您必须手动添加所需的索引,但与ALTER TABLE ...较大的表相比,它通常值得您节省时间(和痛苦).