我有一个 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
更改发动机类型时还需要什么?
您实际上将运行一个命令来转换每个表。
首先对表格进行排序会更快:
ALTER TABLE tablename ORDER BY primary_key_column;
然后,运行 alter 命令:
ALTER TABLE tablename ENGINE = INNODB;
如果表非常大,可能需要一段时间,并且会占用大量 CPU....
首先检查你的数据库是否支持 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 ...
稍微大一点的表相比,您节省的时间(和痛苦)通常是值得的。