MySQL 更改引擎大百万行表



我想将200万行表的引擎从MyISAM更改为InnoDB。我害怕这个长时间的操作,所以我创建了类似的结构InnoDB表,现在我想将所有数据从旧表复制到这个新表。最快的方法是什么?选择插入?开始交易呢?请帮忙。我不想挂起我的服务器。

帮自己一个忙:将整个设置复制到本地计算机并在那里尝试所有设置。你会对自己正在进入的东西有一个更好的了解。只需注意生产服务器和本地计算机之间的硬件潜在差异。

最快的方法可能是最直接的方法:

INSERT INTO table2 SELECT * FROM table1;

我怀疑你不能比 ALTER 内置的更快。它确实必须复制所有数据并重建所有索引。

请务必提高innodb_buffer_pool_size为InnoDB做准备。 并降低key_buffer_size以留出空间。 建议分别使用 35% 和 12% 的 RAM 进行转换。 转换所有表后,建议使用 70% 和仅 20MB。

一个轻微的加速是执行一些选择,以获取整个表和整个PRIMARY KEY(如果可以缓存(。 这将在真正开始之前执行一些 I/O。 示例:SELECT avg(id) FROM tbl其中 id 是主键。 SELECT avg(foo) FROM tbl foo 没有索引,而是数字。 这些将强制对PK索引和数据进行完全扫描,从而缓存ALTER必须读取的内容。

转换的其他提示: http://mysql.rjweb.org/doc.php/myisam2innodb .

最新更新