平滑升级 TiDB
本文档介绍 TiDB 的平滑升级集群功能,支持无需手动取消 DDL 的操作。
从 v7.1.0 起,当将 TiDB 升级至更高的版本时,TiDB 支持平滑升级功能,取消了升级过程中的限制,提供更平滑的升级体验。此功能默认开启,且无开关控制。
功能简介
TiDB 引入平滑升级功能前,对于升级过程中的 DDL 操作有如下限制(可以参考使用 TiUP 升级 TiDB中警告部分):
- 在升级过程中执行 DDL 操作,TiDB 可能会出现未定义的行为。
- 在 DDL 操作执行过程中升级 TiDB,TiDB 可能会出现未定义的行为。
引入平滑升级后,TiDB 升级过程不再受上述限制。
升级过程中,TiDB 会自动进行以下操作,无需用户干预:
- 暂停用户的 DDL 操作。
- 执行升级过程中的系统 DDL 操作。
- 恢复被暂停的用户的 DDL 操作。
- 完成升级。
其中,恢复的 DDL job 仍会按升级前的顺序执行。
使用限制
使用平滑升级功能时,需要注意以下限制。
用户操作限制
在升级前,如果集群中存在正在处理的 canceling DDL job,即有正在被处理的 DDL job 被用户取消了,由于处于 canceling 状态的 job 无法被
pause
,TiDB 会尝试重试。如果重试失败,会报错并退出升级。如果 TiDB 分布式执行框架(实验特性)已启用,请关闭 TiDB 分布式执行框架(即将
tidb_enable_dist_task
设置为默认值OFF
),并确保所有分布式ADD INDEX
和IMPORT INTO
任务已完成,或者取消这些任务并等待升级完成后重新开始。否则,升级期间的ADD INDEX
操作可能导致数据索引不一致。在使用 TiUP 进行升级的场景下,由于 TiUP 升级存在超时时间,如果在升级之前集群中有大量 DDL(超过 300 条)正在处理队列中等待执行,则此次升级可能会失败。
在升级过程中,不允许以下操作:
对系统表(
mysql.*
、information_schema.*
、performance_schema.*
、metrics_schema.*
)进行 DDL 操作。执行手动取消 DDL job 操作:
ADMIN CANCEL DDL JOBS job_id [, job_id] ...;
。导入数据。
工具使用限制
在升级过程中,不支持使用以下工具:
BR:BR 可能会将处于 paused 状态的 DDL 拷贝到 TiDB 中,而此状态的 DDL 不能自动 resume,可能导致后续 DDL 卡住的情况。
DM 和 TiCDC:如果在升级过程中使用 DM 和 TiCDC 向 TiDB 导入 SQL,并且其中包含 DDL 操作,则该导入操作会被阻塞,并可能出现未定义错误。