什么时候从 MyISAM 切换到 InnoDB?

And*_*rew 7 mysql innodb myisam mysql-5.5

我们有一个 MySQL 5.0 服务器,以 MyISAM 的形式运行所有表。我们有两个奴隶,在上个月,我们已经升级到 MySQL 5.5。他们的表也仍然是 MyISAM。

我原来的计划是把5.0的master升级到5.5,然后转成InnoDB。现在我想知道,在升级之前开始是否更有意义?我一直很谨慎,因为我听说 5.5 下的 InnoDB 比 5.0 下的 InnoDB 快得多。这是没有根据的,我现在应该开始吗?

Rol*_*DBA 9

如果您需要大量 UPDATE 和 INSERT 的并发,您将需要 InnoDB

如果您需要解决死锁,则需要 InnoDB

如果您想要一个同时缓存数据和索引的存储引擎,您将需要 InnoDB

如果您想有效地访问多个 CPU,您将需要 InnoDB(并对其进行调整

请参考我过去关于 InnoDB 的文章:

你说你听说过 MySQL 5.5 比 MySQL 5.0 快。开箱即用,这不是真的。您必须调整 MySQL 5.5 才能从中获得出色的性能!!!以下是我过去关于该主题的文章:

您提到 MyISAM 比 InnoDB 更快。如果 MyISAM 中有很多宽 VARCHAR 列且默认 ROW_FORMAT=Dynamic(默认),则会降低 MyISAM 的性能。说一个存储引擎比另一个更快取决于应用程序、读/写 I/O 比率、存储引擎调整。

查看我关于这个主题的帖子

解决您现在还是稍后转换为 InnoDB 的问题:

在我提供的第五个链接(哪个先:升级mysql版本或转换存储引擎?)中,我建议先转换。但是,在您的特定情况下,我建议稍后转换。原因很简单:您正在将数据移动到不同的服务器。MyISAM 表很容易移植。执行 /var/lib/mysql 的 rsync 或 scp 比转换为 InnoDB 更方便(更快),因为当作为 InnoDB 存在时,数据会稍微(有时显着)大。

您需要做两件事:

需要 #1

如果您使用 rysnc/scp,/var/lib/mysql您将覆盖 /var/lib/mysql/mysql。因此,我建议您像这样移动数据:

需要 #2

您需要一个简单的脚本来将 MyISAM 转换为 InnoDB。请在 MySQL 5.5 数据库服务器上运行以下命令:

echo "SET SQL_LOG_BIN = 0;" > /root/ConvertMyISAMToInnoDB.sql
MYSQL_CONN="-u... -p..."
mysql ${MYSQL_CONN} -AN -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;') InnoDBConversionSQL FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY (data_length+index_length)" > /root/ConvertMyISAMToInnoDB.sql
less /root/ConvertMyISAMToInnoDB.sql
Run Code Online (Sandbox Code Playgroud)

当您对转换脚本感到满意时,在 MySQL 5.5 上登录 mysql 并运行

mysql> source /root/ConvertMyISAMToInnoDB.sql
Run Code Online (Sandbox Code Playgroud)

试一试 !!!


归档时间:

查看次数:

7255 次

最近记录:

13 年 前