适用场景
大表变更最容易出事:一条 ALTER 锁表几十分钟,业务直接不可用。正确做法是用支持在线变更的工具、限速、分阶段执行,并提前确认从库延迟与磁盘空间。
配置步骤(变更窗口与回退设计)
# 1) 变更分级
# L1 只加索引/加可空字段:低风险,低峰执行
# L2 改字段类型/改索引:中风险,需从库验证
# L3 改主键/拆表:高风险,需停机或灰度
# 2) 回退设计
# - 保留变更前表结构快照:SHOW CREATE TABLE 存档
# - 加字段可直接 DROP COLUMN 回退
# - 改类型回退可能重建表,需提前测算耗时
# 3) 窗口内步骤
# a. 通知业务方
# b. 备份/快照
# c. 执行变更(限速)
# d. 验证(结构/行数/查询)
# e. 通知恢复
# 4) 变更记录:时间、执行人、语句、耗时、影响
关键参数与建议
- 先评估:表大小、行数、索引数量、是否有外键与触发器
- 工具选择:MySQL 8.0 原生 Online DDL 或 gh-ost / pt-osc,视版本与场景定
- 限速:控制每秒处理行数,避免从库延迟与磁盘 IO 打满
- 空间:在线变更期间要额外空间存放影子表,磁盘水位 < 70% 再动手
- 从库:变更期间关注主从延迟,必要时暂停或降低速率
- 窗口:业务低峰执行,准备好暂停与回退步骤
- 验证:变更后核对表结构、行数、关键查询执行计划
容易踩的坑
- 变更没备份,回退无从下手
- 未通知业务方,变更期间业务方以为系统故障
- 回退步骤只是「反着改回去」,没有实测过
- 变更窗口太短,中途停止留下不一致状态
- 改字段类型未评估重建耗时,窗口内做不完
- 变更记录不写,事后无法复盘
验证与巡检
# 回退可行性验证(测试库执行)
# 1) 用备份恢复结构与数据
# 2) 执行回退语句并计时
# 3) 记录回退耗时,写入变更方案
- 巡检:变更方案含回退步骤与耗时、变更记录归档、遗留问题闭环
小结
大表变更验收:结构变更生效、行数一致、主从无延迟堆积、业务查询性能无退化,且有完整的变更记录。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。