在没有表锁定的情况下在大型 MySQL 生产表上创建索引
在数据库维护期间保持高可用性至关重要,尤其是在处理大量数据时生产表。向包含数百万行的表添加索引通常会停止所有数据操作,从而导致严重的服务中断。幸运的是,有几种技术可以让您在不阻塞插入和选择的情况下创建索引。
MySQL 5.6 及更高版本
在 MySQL 5.6 及更高版本中,索引创建和删除操作是在线执行,确保该表在此过程中保持可用于读写操作。但是,此功能不具有追溯力,这意味着使用早期 MySQL 版本创建的表将无法受益于此在线索引功能。
使用 Circular Masters
如果未启用在线索引如果可用,您可以采用圆形主设置。这包括创建辅助 MySQL 实例、将生产数据库复制到其中、在辅助实例上执行架构更新以及自动将所有客户端切换到更新的实例。此方法需要仔细规划和协调,以避免任何数据丢失或不一致。
Percona 的 pt-online-schema-change 工具
pt-online-schema-change工具自动执行圆形主方法。它创建生产表的临时副本,更新副本上的架构,使用触发器同步数据,并无缝切换到更新的表。该工具提供了手动架构更改的便捷替代方案,可减少停机时间。
RDS 只读副本促销
如果您通过 Amazon 的 RDS 使用 MySQL,则可以利用读取副本促销。这允许您对只读从属实例进行架构更改,然后将该实例提升为新的主实例。虽然 RDS 简化了流程,但仍然需要手动干预来重新配置和重新启动应用程序和数据库。
结论
在大型生产表上创建索引而不阻塞插入选择是一个需要仔细考虑的挑战,最佳方法取决于 MySQL 版本以及专用工具和服务的可用性。如果您使用 MySQL 5.6 或更高版本,在线索引消除了对表锁的需要。否则,循环主节点、pt-online-schema-change 或 RDS 只读副本升级等技术提供了在架构更新期间最大程度地减少服务中断并保持高可用性的方法。
以上是如何在不中断操作的情况下为大型MySQL生产表创建索引?的详细内容。更多信息请关注PHP中文网其他相关文章!