首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:将大型MyISAM表更改为InnoDB (17gb+)的最佳信任/方法

问MySQL:将大型MyISAM表更改为InnoDB (17gb+)的最佳信任/方法
EN

Database Administration用户
提问于 2013-02-05 03:59:53
回答 2查看 1.2K关注 0票数 3

我有一个大型的MySQL (5.1) MyISAM表(13 4GB表,4GB索引- 40mm+记录)

  • 我将在生产环境中将此表转换为InnoDB。

DB位于一个具有8GB RAM的云服务器上(可能会升级到30 8GB的RAM以进行转换)。

这样做的一种方法是简单地编写一个ALTER:

什么样的设置和信任将是最理想的转换方式,以这种方式,尽快和顺利的?

我读过的一些建议设置:

  • 大型innodb_buffer_pool_size ( 4GB是最大的吗?)
  • 使用shell命令预先读取旧的myisam数据/索引文件
  • 增加innodb_log_file_size (在这种情况下最佳大小是什么?)
  • 在X并行线程中执行alter,其中X是服务器上CPU核心的数量(您如何做到这一点?)
  • 其他小调整(innodb_doublewrite=0,innodb_flush_log_at_trx_commit=0)

注意:这里类似的问题(但是有不同服务器大小的小得多的表示例):https://stackoverflow.com/questions/2081823/speeding-up-conversion-from-myisam-to-innodb/2081871#2081871

当然,还有其他方法可以这样做:

  • 执行旧表的MYSQLDUMP并重新插入到新的干净的InnoDB表中,
  • 运行"SELECT *.插入.“查询,或
  • 运行“选择进入OUTFILE.”查询旧表,然后是“加载数据信息.”对新表的查询

1.您将如何配置您的设置,以使该更改尽可能快速、平稳地运行?

2.你认为哪种方法是最好的选择?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2013-02-05 20:35:26

建议#1

让我们假设您在云服务器上有相当大的磁盘空间。您可以分阶段创建InnoDB表,以观察磁盘空间和慢动作中内存的效果。

假设您的MyISAM表名为mydb.mytable,您希望将它转换为InnoDB。

尝试以下几点:

代码语言:javascript
复制
CREATE TABLE mydb.mytable_new LIKE mydb.mytable;
ALTER TABLE mydb.mytable_new ENGINE=InnoDB;
INSERT INTO mydb.mytable_new SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytable_old;
ALTER TABLE mydb.mytable_new RENAME mydb.mytable;

玩桌子。

如果你喜欢它的表演,那么

代码语言:javascript
复制
DROP TABLE mydb.mytable_old;

如果你不喜欢它的表现,那么

代码语言:javascript
复制
TRUNCATE TABLE mydb.mytable_old;
INSERT INTO mydb.mytable_old SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytable_zap;
ALTER TABLE mydb.mytable_old RENAME mydb.mytable;
DROP TABLE mydb.mytable_zap;

建议#2

您刚才提到您正在运行MySQL 5.1。除非安装InnoDB插件,否则InnoDB是单线程的。要使InnoDB被多线程,请执行以下操作:

完成任何一项操作后,请将InnoDB配置为使用多个核心。请看我过去的帖子:

票数 1
EN

Database Administration用户

发布于 2013-02-05 09:25:57

我会说我是你最安全的选择。当然,在做这样的事情之前,一定要把所有的事情都做好。我还建议您在一个单独的服务器上进行更改,一般来说,这样的操作完全消耗了资源。

代码语言:javascript
复制
select * into

这是一个非常糟糕的主意,因为你会失去所有的索引。

代码语言:javascript
复制
select into outfile

和mysqldump差不多。然而,它将比mysqldump消耗更多的资源。

就我个人而言,当我需要在桌子上做重大改变时,这就是我一直做的事情。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/34260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档