6

我有一个 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

更改发动机类型时还需要什么?

4

2 回答 2

17

您实际上将运行一个命令来转换每个表。

首先对表格进行排序会更快:

ALTER TABLE tablename ORDER BY primary_key_column;

然后,运行 alter 命令:

ALTER TABLE tablename ENGINE = INNODB;

如果表非常大,可能需要一段时间,并且会占用大量 CPU....

于 2012-04-06T04:50:16.023 回答
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 ...稍微大一点的表相比,您节省的时间(和痛苦)通常是值得的。

于 2012-04-06T06:23:12.593 回答