加快从MyISAM到InnoDB的转换

kno*_*orv 17 mysql optimization myisam innodb

我有一个MySQL 1.5 GB MyISAM表(1.0 GB数据,0.5 GB索引)正在制作中,我即将转换为InnoDB.

由于该表用于生产,我希望尽可能缩短停机时间.

我的问题:

  • 应该调整哪些MySQL配置选项以加快速度ALTER TABLE table_name ENGINE=InnoDB;

  • 为了加快生产数据库表从MyISAM到InnoDB的转换,可以使用哪些其他技巧?

ggi*_*oux 13

  • 设置一个大的innodb_buffer_pool_size(2GB或更多)
  • 使用shell命令预读旧的myisam数据/索引文件
  • 增加innodb_log_file_size(256 MB)
  • 在X并行线程中执行alter table,其中X是服务器上CPU核心的数量
  • 仅用于转换的其他小调整(innodb_doublewrite = 0,innodb_flush_log_at_trx_commit = 0)

设置innodb_buffer_pool_size尽可能高是加速innodb表创建的典型方法 - 你的数据集看起来可能适合2GB innodb缓冲池,所以任何体面的64位服务器都应该允许.alter table type = innodb也比dump + reimport解决方案快,并且很容易并行运行.

还要确保将innodb_log_file_size从默认值5Mb增加到128或256MB.小心,它需要一个干净的关闭+删除旧的ib_logfile*.

如果您的服务器有8GB的ram,并且运行64位版本的mysql,我建议使用2GB的innodb_buffer_pool,你甚至可以在关闭停机时预读旧的MYD和MYI文件,这样它们就会在实际工作开始时OS的页面缓存.

如果您还进行了小调整,请记住,您需要在转换后撤消它们(另一个小的停机时间)以确保您的数据安全,我怀疑它们对于这么小的数据集是值得的.

祝好运.