我有一个myisam专用的32 GB内存的mysql服务器,它在默认配置下运行。我想要将一个表的引擎类型更改为InnoDB,以避免表锁。它有5000万条记录,磁盘大小约为15 GB。我正在使用mysql版本5.5,我想我需要添加以下选项并重新启动mysql。
innodb_buffer_pool_size=1G
innodb_log_file_size=100M
innodb_file_per_table=1在更改发动机类型时,还需要考虑哪些内容?
发布于 2012-04-06 12:50:16
实际上,您将运行一个命令来转换每个表。
首先对表进行排序会更快:
ALTER TABLE tablename ORDER BY primary_key_column;然后,运行alter命令:
ALTER TABLE tablename ENGINE = INNODB;如果表真的很大,可能需要一段时间,而且会占用大量的CPU……
发布于 2012-04-06 14:23:13
首先,检查您的数据库是否支持InnoDB引擎(我打赌它是受支持的;):
SHOW ENGINES\G如果是,则已经有默认innodb related parameters,请使用以下命令进行检查:
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 ...相比,这通常值得您节省时间(和痛苦)。
https://stackoverflow.com/questions/10039187
复制相似问题