零停机数据库迁移实战:百万级表结构变更的安全方案
Zero-Downtime Database Migration Safe Schema Changes on Million-Row Tables
| David | 2026-09-25T03:11:00
线上百万级数据表要加字段、改索引,直接 ALTER TABLE 分分钟锁表。分享我们用 pt-online-schema-change 和蓝绿部署实现零停机迁移的经验。
Adding columns or changing indexes on million-row production tables risks table locks.
线上数据库表结构变更是后端最紧张的操作之一。表小的时候随便 ALTER,但当表有几百万行数据时,一条 ALTER TABLE 可能锁表好几分钟。方案一:pt-online-schema-changePercona Toolkit 的 pt-osc 是最成熟的在线 DDL 工具。原理是创建影子表,通过触发器同步增量数据,分批拷贝历史数据,最后原子 RENAME 完成切换。pt-online-schema-change --alter "ADD COLUMN phone VARCHAR(20) DEFAULT ''" --chunk-size 1000 --max-lag 1s D=mydb,t=users --execute方案二:蓝绿部署 + 双写对于更复杂的变更(改主键、拆表),用蓝绿方案:准备新表→应用层双写→后台同步历史数据→切换读流量→停止双写。可以随时回滚。踩坑pt-osc 触发器在高并发写入时可能导致延迟升高双写要处理好并发更新同一行的一致性迁移期间不要 OPTIMIZE TABLE
Two proven zero-downtime approaches for schema changes on large tables: pt-online-schema-change for simple DDL, and blue-green dual-write for complex changes.