首页  >  文章  >  数据库  >  如何在不锁表的情况下为巨大的MySQL生产表创建索引?

如何在不锁表的情况下为巨大的MySQL生产表创建索引?

Linda Hamilton
Linda Hamilton原创
2024-10-31 00:25:02675浏览

How to Create an Index on a Huge MySQL Production Table Without Locking the Table?

在没有表锁定的情况下在巨大的 MySQL 生产表上创建索引

问题:

您需要创建索引在生产环境中的海量 MySQL 表上,而不中断正在进行的操作。

传统智慧(2015):

在 5.6 之前的 MySQL 版本中,在MyISAM 或 InnoDB 表会阻止写入操作。

MySQL 5.6 (2017) 中的在线索引更新:

MySQL 5.6 及更高版本支持在线索引更新,允许您添加或更新索引删除索引而不阻塞读取或写入。

在不停机的情况下更新架构:

如果您无法使用 MySQL 5.6 或更高版本,可以使用以下方法更新架构无需停机:

  1. 循环主服务器:启动新的主服务器并从现有主服务器复制写入。
  2. 在新主服务器上执行架构更新: 在新主服务器上进行架构更改。
  3. 交换客户端:以原子方式将所有客户端从旧主服务器迁移到新主服务器。
  4. 更新旧主控: 对旧主控重复相同的过程,将其更新为辅助主控。

Percona 的 pt-online-schema-change 工具:

此工具提供了一种在不阻塞操作的情况下更改表架构的替代方法。它会创建一个具有所需结构的新表,进行架构更改,并在替换原始表之前逐步复制原始表中的数据。

Amazon RDS:

Amazon RDS通过允许您创建只读副本、对副本进行架构更改,然后将副本提升为新的主服务器,简化了流程。这种方法可以最大限度地减少停机时间并简化切换过程。

以上是如何在不锁表的情况下为巨大的MySQL生产表创建索引?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn