gpt4 book ai didi

mysql - 在线时向大型 MySql 表添加一列

转载 作者:可可西里 更新时间:2023-11-01 06:46:03 24 4
gpt4 key购买 nike

我需要向包含超过 2000 万行的 MySQL 数据库(MyISAM 表)中的表添加一个新列。

添加列的过程必须在运行时进行,我的意思是应用程序仍在运行,并且在更改表时仍会插入和选择行。

  • 这将如何影响正在运行的应用程序?
  • 执行此更改需要多长时间?

如何在不损害正在运行的应用程序的情况下安全地执行此过程?

最佳答案

在执行 DDL 查询时表被锁定。这并不意味着服务器在锁定时不接受对其他 session 的查询,但它们已排队并且可能在您的 ALTER TABLE 完成之前超时。根据硬件、表结构和行数(您说的相当多)等因素,更改将需要一段时间。

在 MySQL 5.5(更快的索引创建,innodb)、8 核 CPU、芯片磁盘上,在我们的案例中更改具有多个索引的 500 万行表大约需要 15-20 分钟。

我建议创建一个副本,然后修改副本。完成后,您必须重播数据增量。 Facebook 必须在更高层次上处理这个问题,看看这个

http://m.facebook.com/note.php?note_id=430801045932

不过,我不能保证这一切都能在 MyISAM 引擎上安全地工作

编辑:

Percona 创建了一个显然适用于所有存储引擎的工具包:

http://www.mysqlperformanceblog.com/2012/04/05/percona-toolkit-2-1-with-new-online-schema-change-tool/

With this release we introduce a new version of pt-online-schema-change, a tool that enables you to ALTER large tables with no blocking or downtime. As you know, MySQL locks tables for most ALTER operations, but pt-online- schema-change performs the ALTER without any locking. Client applications can continue reading and writing the table with no interruption.

关于mysql - 在线时向大型 MySql 表添加一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com