Sim*_*onW 6 mysql myisam alter-table large-data
我需要在MySQL DB(MyISAM表)中的一个表中添加一个新列,该表包含超过2000万行.
添加列的过程必须在运行时,我的意思是应用程序仍将运行,并且在更改表时仍将插入和选择行.
如何安全地完成此过程并且不会损害正在运行的应用程序?
执行 DDL 查询时表被锁定。这并不意味着服务器在锁定时不接受对其他会话的查询,但它们已排队并可能在您的 ALTER TABLE 完成之前超时。根据硬件、表结构和当然的行数(你说的相当多)等因素,更改将需要一段时间。
在 MySQL 5.5(更快的索引创建,innodb)、8 核 CPU、芯片磁盘上,在我们的案例中,更改具有多个索引的 500 万行表大约需要 15-20 分钟。
我建议创建一个副本,并更改副本。完成后,您必须重播数据增量。Facebook 不得不在更高的层次上处理这个问题,看看这个
http://m.facebook.com/note.php?note_id=430801045932
Tho,我不能保证这一切都会在 MyISAM 引擎上安全地工作
编辑:
Percona 创建了一个显然适用于所有存储引擎的工具包:
在此版本中,我们引入了 pt-online-schema-change 的新版本,该工具使您能够在无阻塞或停机的情况下更改大型表。如您所知,MySQL 为大多数 ALTER 操作锁定表,但 pt-online-schema-change 执行 ALTER 时没有任何锁定。客户端应用程序可以不间断地继续读取和写入表。