将新列添加到大表的最佳方法?(MySQL - MyISAM)

off*_*101 3 mysql myisam alter-table

以下是有关需要更改的表格的更多信息:

  • 15GB 大小的 MyISAM 表,索引大约为 5GB
  • 超过 1 亿行
  • RHEL 5 上的 MySQL 5.1,具有 4GB RAM
  • 目前在线直播

向这样的大表添加几个新列(最少 2 列)的最佳方法是什么?停机时间最短。如果不是一两天的话,仅使用直接的 ALTER 表命令将需要数小时才能完成。

附加问题:如果新列默认值设置为 NULL 而不是“预定义”值,它会影响添加新列所需的时间长度吗?

aku*_*sky 8

要对表进行在线更改,您可以使用pt-online-schema-change

    pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor
Run Code Online (Sandbox Code Playgroud)

该表在切换新旧表时会被阻塞几秒钟。该表虽然必须有一个主键并且没有触发器。