Skip to content

TiDB 升级操作

升级前准备

1. 环境检查

bash
# 检查当前 TiDB 版本
tiup cluster display <cluster-name>

# 检查 TiUP 版本
tiup --version

# 更新 TiUP 到最新版本
tiup update --self && tiup update cluster

# 检查集群状态
tiup cluster check <cluster-name> --run-all-checks

2. 备份数据

bash
# 使用 TiDB Backup & Restore (BR) 进行全量备份
tiup br backup full --pd <pd-address>:2379 --storage s3://<bucket-name>/<backup-path> --ratelimit 128

# 备份集群配置
tiup cluster export <cluster-name> --output ./cluster-config.yaml

3. 测试升级

bash
# 在测试环境进行升级测试
tiup cluster upgrade <test-cluster-name> v<target-version> --force

滚动升级

滚动升级是 TiDB 推荐的升级方式,它可以在不停止服务的情况下完成升级,适合对可用性要求较高的生产环境。

执行滚动升级

bash
# 查看可用的 TiDB 版本
tiup list tidb

# 执行滚动升级
tiup cluster upgrade <cluster-name> v<target-version>

3. 升级过程监控

bash
# 监控升级进度
tiup cluster display <cluster-name>

# 查看升级日志
tiup cluster log <cluster-name> --follow

4. 升级顺序

TiDB 滚动升级的顺序为:

  1. PD 集群
  2. TiKV 集群
  3. TiDB 集群
  4. TiFlash 集群(如果有)
  5. TiCDC 集群(如果有)
  6. 其他组件(如监控组件)

蓝绿部署升级

蓝绿部署是一种零停机升级方式,通过同时维护两套环境(蓝环境和绿环境),实现无缝切换。

蓝绿部署步骤

步骤 1: 部署绿环境

bash
# 使用现有配置部署绿环境
tiup cluster deploy <cluster-name>-green v<target-version> ./cluster-config.yaml --yes

# 启动绿环境
tiup cluster start <cluster-name>-green

步骤 2: 验证绿环境

bash
# 验证绿环境状态
tiup cluster display <cluster-name>-green

# 运行功能测试
sqlbench <green-env-address>

步骤 3: 切换流量

bash
# 更新负载均衡配置,将流量从蓝环境切换到绿环境
# 具体操作取决于使用的负载均衡产品

步骤 4: 监控切换后状态

bash
# 监控绿环境性能
grafana <green-env-grafana-address>

# 检查错误日志
tiup cluster log <cluster-name>-green --follow

步骤 5: 清理蓝环境

bash
# 确认绿环境稳定运行后,清理蓝环境
tiup cluster destroy <cluster-name> --yes

升级后验证

1. 集群状态验证

bash
# 检查集群状态
tiup cluster display <cluster-name>

# 检查所有组件版本
tiup cluster check <cluster-name> --version

# 检查集群健康状态
curl http://<pd-address>:2379/pd/api/v1/health

2. 功能验证

sql
-- 连接到 TiDB 执行基本 SQL 操作
SELECT VERSION();
SELECT 1 + 1;
CREATE DATABASE test_upgrade;
USE test_upgrade;
CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO t1 VALUES (1, 'test');
SELECT * FROM t1;
DROP DATABASE test_upgrade;

3. 性能验证

bash
# 运行性能测试
tiup bench tpcc --db tpcc --host <tidb-address> --port 4000 --user root --password <password> --warehouses 100 prepare
tiup bench tpcc --db tpcc --host <tidb-address> --port 4000 --user root --password <password> --warehouses 100 run --time 300

4. 数据一致性验证

bash
# 使用 sync-diff-inspector 验证数据一致性
tiup sync-diff-inspector --config ./sync-diff-config.toml

回滚操作

1. 回滚时机

在以下情况下需要执行回滚操作:

  • 升级过程中出现严重错误
  • 升级后发现功能异常
  • 升级后性能严重下降

2. 执行回滚

bash
# 查看集群历史版本
tiup cluster history <cluster-name>

# 执行回滚
tiup cluster rollback <cluster-name> --force

3. 回滚后验证

bash
# 检查回滚后的集群状态
tiup cluster display <cluster-name>

# 验证数据完整性
tiup br validate full --pd <pd-address>:2379 --storage s3://<bucket-name>/<backup-path>

升级注意事项

1. 版本兼容性

  • 确保升级路径符合官方建议
  • 跨大版本升级时,需遵循官方指定的升级步骤
  • 检查应用程序与新版本 TiDB 的兼容性

2. 升级时间窗口

  • 选择业务低峰期进行升级
  • 预留足够的回滚时间
  • 提前通知相关业务团队

3. 资源准备

  • 确保升级过程中有足够的磁盘空间
  • 确保网络连接稳定
  • 准备好技术支持渠道

4. 监控重点

  • 升级过程中的组件状态
  • 系统资源使用率
  • 业务请求延迟
  • 错误日志

常见问题(FAQ)

Q1: 升级过程中某个组件失败怎么办?

A1: 可以使用以下命令查看详细日志,分析失败原因:

bash
tiup cluster log <cluster-name> --component <component-name> --instance <instance-address> --follow

根据日志分析结果修复问题后,可以继续执行升级:

bash
tiup cluster upgrade <cluster-name> v<target-version> --force

Q2: 升级后出现性能下降怎么办?

A2: 可以从以下几个方面排查:

  1. 检查执行计划是否变化
  2. 收集并分析慢查询日志
  3. 检查监控指标,特别是 CPU、内存、磁盘 I/O 和网络流量
  4. 考虑调整配置参数
  5. 如果问题无法解决,执行回滚操作

Q3: 如何升级特定组件?

A3: 可以使用 --node 参数指定要升级的组件:

bash
# 只升级 TiDB 组件
tiup cluster upgrade <cluster-name> v<target-version> --node tidb

# 只升级特定节点
tiup cluster upgrade <cluster-name> v<target-version> --node <node-address>:4000

Q4: 升级过程中可以中断吗?

A4: 不建议在升级过程中中断,这可能导致集群状态不一致。如果必须中断,可以使用 Ctrl+C 停止升级,然后尝试修复问题后重新执行升级。

Q5: 升级后需要更新统计信息吗?

A5: 建议在升级后更新统计信息,以确保优化器生成准确的执行计划:

sql
-- 更新所有数据库的统计信息
ANALYZE TABLE ALL IN <database-name>;

-- 更新特定表的统计信息
ANALYZE TABLE <table-name>;

Q6: 如何升级 TiFlash 组件?

A6: TiFlash 组件会在滚动升级过程中自动升级,无需单独操作。如果需要单独升级 TiFlash,可以使用:

bash
tiup cluster upgrade <cluster-name> v<target-version> --node tiflash

Q7: 升级后监控组件需要单独升级吗?

A7: 是的,监控组件(如 Prometheus、Grafana)需要单独升级:

bash
tiup cluster upgrade <cluster-name> v<target-version> --monitor

Q8: 如何验证升级后的集群可用性?

A8: 可以使用以下方法验证集群可用性:

bash
# 运行连续性测试
tiup bench point-select --host <tidb-address> --port 4000 --user root --password <password> --db test --tables 1 --count 200000 --concurrency 100

# 检查连接数
tiup cluster display <cluster-name> --dashboard

Q9: 升级过程中 PD 领导者变更会影响升级吗?

A9: 升级过程中 PD 领导者变更不会影响升级,TiUP 会自动处理这种情况。

Q10: 如何升级 TiCDC 组件?

A10: TiCDC 组件会在滚动升级过程中自动升级,无需单独操作。如果需要单独升级 TiCDC,可以使用:

bash
tiup cluster upgrade <cluster-name> v<target-version> --node cdc

Q11: 升级后需要重启应用程序吗?

A11: 一般情况下不需要重启应用程序,但建议在升级后检查应用程序连接和功能是否正常。如果应用程序使用了特定版本的客户端库,可能需要更新客户端库。

Q12: 如何处理升级过程中的网络故障?

A12: 如果升级过程中出现网络故障,建议:

  1. 检查网络连接
  2. 重新执行升级命令
  3. 如果问题持续,考虑回滚到原版本

Q13: 升级后如何回滚到特定版本?

A13: 可以使用以下命令回滚到特定版本:

bash
# 查看可回滚的版本
tiup cluster history <cluster-name>

# 回滚到指定版本
tiup cluster rollback <cluster-name> --version v<rollback-version> --force

Q14: 如何升级 TiDB 集群的配置?

A14: 可以使用以下命令修改和应用集群配置:

bash
# 编辑集群配置
tiup cluster edit-config <cluster-name>

# 应用配置变更
tiup cluster reload <cluster-name> [--component <component-name>]

Q15: 升级后如何检查集群的完整性?

A15: 可以使用以下命令检查集群完整性:

bash
# 检查集群拓扑
tiup cluster topology <cluster-name>

# 检查所有组件状态
tiup cluster check <cluster-name> --run-all-checks

# 验证数据一致性
tiup sync-diff-inspector --config ./sync-diff-config.toml