使用 TiUP 升级 TiDB 集群到 v7.5 需要先确认当前版本和组件状态,根据源版本决定是否可以在线升级或必须停机升级,升级过程中避免执行 DDL 语句,升级后验证各组件状态和配置参数。
先说结论:TiUP 升级 TiDB 到 v7.5 是否支持在线升级取决于源版本和组件类型,TiFlash 从 5.3 之前版本升级必须停机。
- 适合:源版本为 v6.0-v7.4 且 TiFlash 版本不低于 5.3 的集群可尝试在线升级
- 先看:升级前用 ADMIN SHOW DDL 确认无正在执行的 DDL 任务,备份配置和全局变量
- 建议:大版本跨度升级先在测试环境验证,生产环境升级前制定回滚和备份策略
命令速用版
以下是 TiUP 升级 TiDB 到 v7.5 的核心命令序列,按顺序执行:
tiup update `--all` tiup cluster display <cluster-name> tiup cluster upgrade <cluster-name> v7.5.0 tiup cluster reload <cluster-name> `--role` prometheus
如果需要停机升级,先执行停机命令:
tiup cluster stop <cluster-name> tiup cluster upgrade <cluster-name> v7.5.0 tiup cluster start <cluster-name>
为什么会这样
TiDB 升级是否需要停机取决于源版本和目标版本之间的兼容性限制,以及组件类型。官方文档明确说明不支持将 TiFlash 组件从 5.3 之前的老版本在线升级至 5.3 及之后的版本,只能采用停机升级。从 TiDB v7.1 版本升级至更高版本时,可以跳过部分限制实现平滑升级,但 v7.1 之前的版本升级到大版本需要更谨慎。
升级过程中禁止执行 DDL 语句是因为版本切换期间元数据变更可能导致行为未定义,通常为 ADD INDEX 和列类型变更等耗时较久的 DDL 语句会影响升级稳定性。升级前使用 ADMIN SHOW DDL 命令查看集群中是否有正在进行的 DDL Job,如有需等待完成或使用 ADMIN CANCEL DDL 取消后再升级。
分步处理
第一步:确认当前集群状态
执行 tiup cluster display <cluster-name> 查看集群各组件版本和运行状态,记录 TiDB、TiKV、TiFlash、PD 等组件的当前版本号。确认源版本是否在支持的升级路径范围内,如果原集群是 3.0 或 3.1 或更早的版本,不支持直接升级到 v7.5.0,需要先从早期版本升级到 4.0 后再升级。
第二步:检查 DDL 任务和配置
登录 TiDB 执行 ADMIN SHOW DDL 确认无正在执行的 DDL Job。执行 SHOW GLOBAL VARIABLES 和 SHOW CONFIG 保存当前配置,升级后用于对比排查问题。检查配置参数 server-version 的值,升级前将其设置为空或当前 TiDB 真实版本值,避免出现非预期行为。
第三步:选择升级方式
如果源版本为 v7.1 及以上且 TiFlash 版本不低于 5.3,可尝试在线升级直接执行 tiup cluster upgrade <cluster-name> v7.5.0。如果源版本低于 v7.1 或 TiFlash 版本低于 5.3,采用停机升级先执行 tiup cluster stop <cluster-name> 再执行升级命令。大版本跨度升级建议先在测试环境验证,麦谷科技实践建议升级路径为个人环境测试到开发环境验证到测试环境验证再到生产环境升级。
第四步:执行升级命令
执行 tiup update `--all` 更新 TiUP 工具本身。执行 tiup cluster upgrade <cluster-name> v7.5.0 开始升级,升级过程中监控各组件状态。如果配置项 performance.force-init-stats 设置为 ON 会延长 TiDB 启动时间,可能造成启动超时升级失败,建议为 TiUP 设置更长的等待超时。
第五步:处理升级后组件状态
升级完成后执行 tiup cluster display <cluster-name> 检查各组件状态。如果有组件显示 down 状态,尝试执行 tiup cluster reload <cluster-name> `--role` <component> 逐个重载组件,常见需要重载的组件包括 prometheus、alertmanager、cdc、grafana、tiflash。如果 TiDB 节点启动失败且日志提示找不到/tmp/tidb/tmp_ddl 目录,手动创建目录并授权 mkdir -p /tmp/tidb/tmp_ddl-4000 和 chown -R tidb.tidb /tmp/tidb。
怎么验证是否生效
执行 tiup cluster display <cluster-name> 确认所有组件状态为 up。登录 TiDB 执行 SELECT VERSION() 确认版本号已更新到 v7.5.x。检查 Dashboard 概览页确认无集群中未启动必要组件 NgMonitoring 等警告。对比升级前后 SHOW GLOBAL VARIABLES 和 SHOW CONFIG 输出,确认关键配置参数未发生非预期变更,例如 backup.num-threads 等参数可能自动变更影响性能。
常见坑
TiFlash 从 5.3 之前版本升级必须停机,在线升级会导致组件不可用。原集群版本低于 v6.5.7 或 v7.1.0 且目标版本为 v7.2.0 及更高时,performance.force-init-stats 配置可能导致启动超时。升级过程中执行 DDL 语句可能出现行为未定义问题。相同版本下通过升级达到该版本和直接搭建该版本的默认参数不一样,升级前需保存配置用于对比。如果原集群是 6.2 之前的版本,升级到 6.2 及以上版本时部分场景会遇到升级卡住的情况。
常见问题
TiDB 从 v5.3 升级到 v7.5 可以在线升级吗
取决于 TiFlash 版本,如果 TiFlash 版本低于 5.3 必须停机升级,TiDB 和 TiKV 组件可以参考不停机升级注意事项但 TiFlash 限制更严格。
升级后 TiDB 节点启动失败怎么办
检查日志是否提示找不到/tmp/tidb/tmp_ddl 目录,手动创建目录并授权给 tidb 用户,然后重试启动。
升级后 Prometheus 等监控组件显示 down 怎么处理
执行 tiup cluster reload <cluster-name> `--role` prometheus 逐个重载组件,通常重载后状态会恢复正常。
升级前需要备份吗
建议制定全备和增量备份策略并应用在备用集群,升级前保存 SHOW GLOBAL VARIABLES 和 SHOW CONFIG 内容用于升级后对比排查问题。
参考来源
- PingCAP 官方文档,使用 TiUP 升级 TiDB,https://docs.pingcap.com/zh/tidb/stable/upgrade-tidb-using-tiup
- PingCAP 官方文档,TiDB 归档文档站,使用 TiUP 升级 TiDB
- CSDN 博客,TiDB 企业实践 - 麦谷科技,超详细的升级最佳实践 - 从 TiDB v5.3.0 到 v7.5.2
- 51CTO 博客,麦谷科技,TiDB 企业实践 - 从 TiDB v5.3.0 到 v7.5.2
- TiDB 升级笔记,从 v7.1.1 升级到 v7.5.0 实践经验