我有一个大型的MySQL (5.1) MyISAM表(13 4GB表,4GB索引- 40mm+记录)
DB位于一个具有8GB RAM的云服务器上(可能会升级到30 8GB的RAM以进行转换)。
这样做的一种方法是简单地编写一个ALTER:
什么样的设置和信任将是最理想的转换方式,以这种方式,尽快和顺利的?
我读过的一些建议设置:
注意:这里类似的问题(但是有不同服务器大小的小得多的表示例):https://stackoverflow.com/questions/2081823/speeding-up-conversion-from-myisam-to-innodb/2081871#2081871
当然,还有其他方法可以这样做:
发布于 2013-02-05 20:35:26
让我们假设您在云服务器上有相当大的磁盘空间。您可以分阶段创建InnoDB表,以观察磁盘空间和慢动作中内存的效果。
假设您的MyISAM表名为mydb.mytable,您希望将它转换为InnoDB。
尝试以下几点:
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;玩桌子。
如果你喜欢它的表演,那么
DROP TABLE mydb.mytable_old;如果你不喜欢它的表现,那么
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;您刚才提到您正在运行MySQL 5.1。除非安装InnoDB插件,否则InnoDB是单线程的。要使InnoDB被多线程,请执行以下操作:
完成任何一项操作后,请将InnoDB配置为使用多个核心。请看我过去的帖子:
May 26, 2011:关于单线程和多线程数据库的性能Sep 12, 2011:是否有可能使MySQL使用多个核心?Sep 20, 2011:多核与MySQL性能发布于 2013-02-05 09:25:57
我会说我是你最安全的选择。当然,在做这样的事情之前,一定要把所有的事情都做好。我还建议您在一个单独的服务器上进行更改,一般来说,这样的操作完全消耗了资源。
select * into这是一个非常糟糕的主意,因为你会失去所有的索引。
select into outfile和mysqldump差不多。然而,它将比mysqldump消耗更多的资源。
就我个人而言,当我需要在桌子上做重大改变时,这就是我一直做的事情。
https://dba.stackexchange.com/questions/34260
复制相似问题