首页  >  文章  >  数据库  >  如何在不中断操作的情况下对巨大的 MySQL 生产表建立索引?

如何在不中断操作的情况下对巨大的 MySQL 生产表建立索引?

Barbara Streisand
Barbara Streisand原创
2024-10-31 11:52:02594浏览

How Can You Index a Huge MySQL Production Table Without Disrupting Operations?

在大型 MySQL 生产表上创建索引

问题陈述:

在大型 MySQL 生产上创建索引表可能会导致数据库锁定。这对确保在索引过程中不间断地访问数据库提出了挑战。

解决方案:

MySQL 5.6 及更高版本:在线索引更新

从MySQL 5.6开始,数据库支持在操作过程中增量索引更新。这意味着索引创建或删除可以与读取和写入同时进行,从而降低阻塞风险并确保数据完整性。

MySQL 5.5 及更早版本

在 MySQL 5.5 及更早版本中,UPDATE 操作对具有活动索引的表进行更新会遇到块。这可能会严重影响性能并导致中断。

要避免这些阻塞,请考虑以下方法:

1.循环主服务器:

  • 建立两台服务器,一台作为主服务器,另一台作为从服务器。
  • 在从服务器上执行索引更新复制来自主服务器的写入。
  • 允许从服务器赶上主服务器,确保更新和旧模式之间的兼容性。
  • 自动将客户端从主服务器切换到从服务器,从而使从服务器具有更新架构的新主服务器。
  • 对主服务器重复此过程,使其成为新的从服务器。

2. Percona 的 pt-online-schema-change:

  • 创建一个与原始结构相同的新表。
  • 更新新表上的架构。
  • 在原表上建立触发器,使更改与副本保持同步。
  • 将原表中的数据批量迁移到新表。
  • 将原表替换为新表。
  • 删除旧表。

3. RDS 只读副本升级:

如果使用 Amazon 的 RDS,您可以创建只读副本并对其执行索引更新。完成后,将副本提升为新的主节点。此方法通过自动执行故障转移和数据迁移来简化流程。

注意:此方法需要重新启动应用程序才能重新连接到更新的数据库实例。

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

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