MySQL的无锁变更

MySQL的无锁变更(Online Schema Change)是指在对数据库进行结构变更(如添加、删除或修改列,添加索引等)时,不需要对整个表进行锁定,从而允许在变更过程中继续进行数据的读写操作。这种能力对于需要高可用性和最小化维护时间的业务来说非常重要。
在传统的数据库操作中,对表结构的修改通常需要获取表级锁(table-level lock),这会阻塞其他对该表的所有读写操作,直到结构变更完成。这种锁定方式在低并发或者业务允许短暂中断的情况下是可行的,但在高并发或者对业务连续性要求较高的场景中,可能会导致服务中断,影响用户体验。
MySQL提供了一些机制来实现无锁变更,例如:
  1. ALTER TABLE:在某些情况下,MySQL的ALTER TABLE命令可以实现无锁变更。例如,当你添加一个新列时,MySQL可以创建一个新的临时表,将旧表中的数据复制到新表中,然后删除旧表并重命名新表为原来的表名。在这个过程中,对于某些存储引擎(如InnoDB),可以最小化锁的粒度。
  1. pt-online-schema-change:这是Percona Toolkit中的一个工具,它提供了一种在生产环境中进行在线DDL(数据定义语言)操作的方法。它通过创建一个新表,将旧表的数据复制到新表中,并在后台进行数据迁移,从而允许在变更过程中继续对旧表进行读写操作。
  1. gh-ost:GitHub开发的在线 schema 迁移工具,全称是“GitHub Orchestrated Schema Transactions”。它支持高并发的在线变更,并且可以与GitHub的API集成,用于自动化数据库迁移流程。
  1. OnlineDDL:一些云服务提供商,如AWS RDS,Google Cloud SQL等,提供了自己的在线DDL服务,允许在不影响数据库可用性的情况下进行结构变更。
 

操作

只能通过ALTER TABLE不能create index

case

Loading...
文章列表
王小扬博客
Java
其他
计算机网络
AI
Git
DB
云原生
Node
Docker
操作系统
Elasticsearch
Apollo
Nestjs
产品
Think
大前端
PHP
软件开发
设计
生活技巧
CI
缓存