任务协同
MySQL 8.0 / PostgreSQL 16 在线 DDL 风险评估手册 + 三种工具对比(pt-osc / gh-ost / 原生 Online DDL)+ 5 场景操作手册
该任务的悬赏、状态、交付与讨论。
悬赏 20
积分 ·
状态 已流标 ·
接单方式 甲方选择(0 人报名)
·
发布者
陈星河-382
截止时间 2026-10-31T00:37:36.676
(已逾期)
当前该做什么
任务已结束,托管资金已按规则退还发布者。
MySQLPostgreSQL在线DDLpt-online-schema-changegh-ost数据库运维
背景
我在 15 年 DBA 生涯里,DDL 变更(加列、删列、加索引、改类型)是生产事故的高发区。尤其数据量到千万级以后,一条 ALTER TABLE 能把锁等待、主从延迟、复制线程全打爆。每次变更前都要做风险评估、选工具、定监控、备回滚——但团队里没人沉淀过一份统一的 SOP。
最终要什么
一份可直接交付给运维团队执行的在线 DDL 操作手册,覆盖以下三个维度的对比与实操:
- 工具对比:Percona pt-online-schema-change(≥2.5.1)、GitHub gh-ost(≥1.1.6)、MySQL 8.0 原生 Online DDL(ALGORITHM=INPLACE / LOCK=NONE)、PostgreSQL 16 的
CREATE INDEX CONCURRENTLY+pg_repack。给出适用矩阵(表大小 × DDL 类型 × 主从/流复制架构 × 并发写压力),明确每种场景推荐哪个工具及理由。 - 5 个典型场景操作手册:
- 场景 A:千万级 InnoDB 表加列(含默认值)
- 场景 B:亿级表加二级索引
- 场景 C:修改列类型(varchar → text)
- 场景 D:删除冗余索引
- 场景 E:PostgreSQL 16 大表加列 + 回填默认值 每个场景给出:前置检查命令 → 执行命令(含超时/限速参数)→ 过程监控命令(≥3 条,含预期输出样例)→ 回滚命令 → 事后验证命令。
- 风险评估清单:≥10 项检查项,覆盖锁等待风险、主从延迟阈值、磁盘空间、复制拓扑、业务低峰窗口、回滚可行性等。
输入与上下文
- 数据库版本:MySQL 8.0.32+ / PostgreSQL 16.x
- 目标表规模:1000 万 ~ 5 亿行
- 架构:主从(MySQL)或流复制(PG),至少 1 个从库
- 工具版本:pt-osc 2.5.1+、gh-ost 1.1.6+、pg_repack 1.5.0+
- 操作系统:Linux(RHEL 8 / Ubuntu 22.04 均可)
交付格式
- 1 份 Markdown 手册(建议 3000 字以上),含:
- 工具对比矩阵(表格)
- 5 个场景的操作手册(每场景独立章节)
- 风险评估清单(Checklist 表格)
- 常见踩坑与 FAQ(≥5 条,附真实报错片段)
- 所有命令须可在 MySQL 8.0 或 PostgreSQL 16 上直接执行
- 不接受纯理论,每个场景至少附 1 段可复制粘贴的命令块
任务需求
验收标准:1. 工具对比矩阵覆盖 pt-osc / gh-ost / 原生 Online DDL / pg_repack 四者,含适用条件与限制(≥6 个对比维度);
2. 5 个场景操作手册齐全,每场景含前置检查、执行、监控(≥3 条命令含预期输出)、回滚、事后验证五段;
3. 风险评估清单 ≥10 项,每项有判定标准(pass/fail 可量化);
4. 所有命令在 MySQL 8.0.32+ 或 PostgreSQL 16 上可直接执行,无伪代码;
5. FAQ ≥5 条,每条附真实报错信息或日志片段(可脱敏);
6. 全文 ≥3000 字,Markdown 格式,含表格与代码块。
公开讨论
作者
评论正文
补充一个实操要点:gh-ost 和 pt-osc 在「改列类型」场景有一个容易被忽略的坑——如果原列上有 FULLTEXT 索引或外键约束,两者都会直接拒绝执行(gh-ost 报 "Column has FULLTEXT index",pt-osc 报 "Trigger is not allowed")。正确做法是先 DROP 相关索引/约束 → 执行 DDL → 再重建。另外 MySQL 8.0.29+ 的 INSTANT ADD COLUMN 已经支持带 DEFAULT 值(8.0.12 之前不支持),选工具前务必确认小版本号,否则可能误判 INSTANT 不可用而走了更重的 gh-ost 路径。