MySQL 生产库 DDL 变更:为什么你需要一套审核流程
关键词:MySQL DDL 变更、SQL 审核、数据库变更管理、DDL 审核工具
引言
如果你是 DBA 或者后端开发,大概率经历过这样的场景:
开发同学在群里说一句"帮忙在生产库加个字段",DBA 拿到 SQL 直接执行,结果一条 ALTER TABLE 锁表 30 分钟,业务直接挂了。
或者更刺激的——有人不小心在生产库执行了 DROP TABLE。
这些不是段子,是很多团队真实发生过的事。根本原因只有一个:没有 SQL 变更审核流程。
本文聊聊 MySQL 环境下,DDL 变更应该怎么管。
一、DDL 变更的风险到底在哪
1.1 锁表风险
MySQL 的 ALTER TABLE 在某些操作下会锁定整张表:
-- 以下操作在 MySQL 5.7 中可能导致锁表
ALTER TABLE orders ADD COLUMN remark TEXT;
ALTER TABLE orders MODIFY COLUMN status VARCHAR(100);
ALTER TABLE orders ADD INDEX idx_user_id (user_id);
如果表有几千万行数据,锁表时间可能长达几十分钟。期间所有对该表的读写请求都会被阻塞,直接导致业务不可用。
MySQL 8.0 的 Instant DDL 改善了一部分场景,但并非所有 DDL 都支持 instant 执行,你仍然需要评估。
1.2 数据丢失风险
-- 误操作:删除列
ALTER TABLE users DROP COLUMN phone;
-- 误操作:修改列类型导致数据截断
ALTER TABLE orders MODIFY COLUMN amount INT; -- 原来是 DECIMAL(10,2)
这类操作一旦执行,数据不可恢复(除非有备份)。
1.3 上下游依赖风险
一个字段的变更可能影响:
- 依赖该表的微服务
- 读写分离的从库同步
- ETL 任务
- BI 报表
没有评估就变更,可能引发连锁故障。
二、一个规范的 DDL 变更流程应该是什么样的
开发提交 SQL → 自动语法审核 → 人工审批 → 选择执行窗口 → 执行 → 结果确认 → 归档
2.1 提交阶段
开发在平台上提交 DDL 语句,需要填写:
- 目标数据库实例和库名
- 变更 SQL
- 变更原因
- 期望执行时间
- 是否需要回滚方案
2.2 自动审核
系统自动检查:
- SQL 语法是否正确
- 是否符合命名规范(如索引命名必须以
idx_开头) - 是否存在高风险操作(DROP、TRUNCATE)
- 表数据量评估(大表需要用 Online DDL 工具)
- 是否有重复索引
- 字段类型是否合理
2.3 人工审批
DBA 审核:
- 变更是否合理
- 执行时间是否在低峰期
- 是否需要特殊处理(如 pt-online-schema-change)
2.4 执行与回滚
- 执行过程可观察(进度、锁等待状态)
- 自动生成回滚语句
- 执行结果通知相关人员
三、常见的 DDL 变更管理方案
方案一:口头/群里喊人
- 优点:快
- 缺点:没有记录,没有审核,出了事没人负责
- 适合:个人项目、3 人以下团队
方案二:用 Git 管理 SQL 文件
- 在代码仓库建
/sql目录,DDL 变更通过 PR 审核 - 优点:有记录、有审核
- 缺点:审核只看 SQL 文本,不知道目标表有多大、有没有锁风险;执行还是靠人工
方案三:使用专业的 SQL 审核平台
- 自动审核 + 工单流程 + 执行管控一体化
- 优点:全流程管控,有审计记录
- 缺点:需要部署和维护一套平台
如果你的团队超过 5 个人、数据库实例超过 10 个,强烈建议用方案三。
四、用 SQLDEV 实现 MySQL DDL 审核
SQLDEV 是一款开源的数据库堡垒机平台,内置了 SQL 审核引擎和工单审批流程,以下是实际操作流程:
4.1 配置审核规则
在 SQLDEV 管理后台,可以配置 MySQL 审核规则:
- 必须使用
IF NOT EXISTS创建表 - 索引命名必须以
idx_开头 - 禁止
SELECT * ALTER TABLE操作数据量超过 100 万行时,强制使用 Online DDL- 禁止
DROP TABLE(或需要额外审批) - 新建表必须有主键
- 字段必须有注释
4.2 提交工单
开发在 Web 界面提交 SQL 工单:
- 选择目标数据库实例
- 粘贴 DDL 语句
- 系统实时展示审核结果(通过/警告/阻断)
- 审核通过后,提交给 DBA 审批
4.3 审批执行
- DBA 收到通知(支持钉钉、企业微信消息推送)
- 查看审核详情,确认后执行
- 执行过程实时可观察
- 完成后自动通知提交人
4.4 审计追溯
所有操作记录永久保存:
- 谁提交的
- 谁审批的
- 什么时候执行的
- 执行结果如何
- 满足等保合规审计要求
五、最佳实践总结
- 所有生产库 DDL 必须走工单,不允许直连执行
- 自动审核 + 人工审核双保险,机器检查规范,人工判断合理性
- 大表变更用 Online DDL(pt-osc / gh-ost / MySQL 8.0 Instant DDL)
- 变更窗口选在业务低峰期,避开大促、月底结算等关键时段
- 保留回滚方案,变更前确认可以回退
- 做好变更通知,相关开发、运维、QA 都应该知道变更内容
写在最后
SQL 审核不是给开发添麻烦,而是保护生产环境的最后一道防线。一个好的流程能在问题发生之前拦截它,而不是在出事之后追责。
如果你的团队还没有 SQL 审核流程,现在就是最好的开始时间。
SQLDEV 社区版免费下载,支持 MySQL、Oracle、PostgreSQL 等 30+ 种数据库: https://www.sqldev.info
本文首发于 SQLDEV 官方博客。关注我们获取更多数据库管理实战经验。
