mysql - 将 MySQL 数据库的存储引擎从 InnoDB 转换为 MyISAM 并返回(特定于 Drupal 7)会产生什么后果?

标签 mysql database drupal-7 innodb myisam

我正在升级中等规模(超过 20 万用户)Drupal 6 CMS 到 Drupal 7。将使用 Migrate Module 处理数据迁移。 .在 Drupal 版本 6 之前,MyISAM 是 Drupal 数据库的默认 MySQL 存储引擎。从 Drupal 版本 7 开始,推荐使用 InnoDB。据此,我开发的迁移类必须将数据从旧的 D6 MyISAM DB 迁移到新的 D7 InnoDB DB。

我在运行迁移脚本时遇到了严重的性能问题:在“大型”Amazon Web Services 服务器实例上迁移 200k+ 用户配置文件需要 20 多个小时,该实例实际上已为此目的进行了优化。这种性能问题对于使用所述迁移模块的迁移并不少见,正如我从阅读该模块的问题跟踪器中了解到的那样。但是,我找到了一种解决方案,通过将 D7 数据库从 InnoDB 转换为 MyISAM,将性能提高十倍。

现在的问题是:一旦用户再次使用它,我将不得不使用 InnoDB 存储引擎运行 D7 数据库,我想知道如果我设置存储引擎是否会对数据库造成任何损害在迁移过程中转到 MyISAM,然后返回到 InnoDB?

感谢您的帮助。

最佳答案

如果您看到 InnoDB 和 MyISAM 之间存在非常大的性能差异,很可能是因为 InnoDB 正在提供事务保证。在迁移期间将 innodb_flush_log_at_trx_commit 变量设置为 0 应该可以让您在迁移时获得非常好的性能,然后您可以将其设置回 1 迁移完成后。

即时更改是安全的;但是,您应该注意,如果服务器在设置为 0 时崩溃,您可能会丢失一些已提交的事务(但对于您的迁移,我认为警告是可以的)。

关于mysql - 将 MySQL 数据库的存储引擎从 InnoDB 转换为 MyISAM 并返回(特定于 Drupal 7)会产生什么后果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580919/

相关文章:

mysql - 如何通过两列中的外键对列求和?

mysql - drush sql-sync 上的访问被拒绝(远程用户和数据库用户不同)

python - MySQL - INSERT IGNORE 递增 auto_increment 主键

php - 如何以html和php形式在sql表中添加多个数据

mysql - 如何解决致命的 SQL 语句错误?

mysql - 如果在 LEFT JOIN 和 WHERE 子句中找不到结果,如何在 MySQL 查询中返回 NULL 值

php - 保存序列化列中的每个值并将它们存储为格式化

mysql - Sql查询读取多行

drupal-7 - drupal alter node编辑表单

mysql - 使用 $query->addExpression() 时如何保留要选择的字段的顺序