1. 首页 > 国产数据库教程 > TiDB教程 > 正文

tidb教程FG067-TiDB版本升级与兼容性检查

本文档风哥主要介绍TiDB版本升级与兼容性检查,包括版本升级的概念、兼容性检查的概念、升级流程、升级前准备、兼容性检查、回滚计划、升级实施方案、兼容性检查实施方案、升级后检查等内容,风哥教程参考TiDB官方文档版本升级相关内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 版本升级的概念

版本升级是指将TiDB集群从一个版本升级到另一个版本的过程,包括小版本升级和大版本升级:学习交流加群风哥微信: itpux-com

版本升级的类型:

  • 小版本升级:升级补丁版本,如从6.1.0升级到6.1.1,主要修复bug和安全漏洞
  • 大版本升级:升级主版本或次版本,如从6.0.0升级到6.1.0,或从6.x升级到7.x,可能包含新特性和不兼容变更

1.2 兼容性检查的概念

兼容性检查是指在升级前检查当前系统与目标版本之间的兼容性,确保升级过程顺利进行:

# 兼容性检查的内容

## 1. 硬件兼容性
– 检查服务器硬件是否满足目标版本的要求
– 检查存储设备是否支持目标版本的特性
– 检查网络设备是否满足目标版本的网络要求

## 2. 软件兼容性
– 检查操作系统版本是否兼容
– 检查依赖软件版本是否兼容
– 检查应用程序是否兼容

## 3. 数据兼容性
– 检查数据格式是否兼容
– 检查索引结构是否兼容
– 检查配置文件是否兼容

## 4. API兼容性风哥提示:
– 检查SQL语法是否兼容
– 检查客户端API是否兼容
– 检查系统接口是否兼容

## 5. 性能兼容性
– 检查性能特性是否兼容
– 检查资源使用是否兼容
– 检查监控指标是否兼容

1.3 升级流程

升级流程包括以下步骤:

# 升级流程

## 1. 升级前准备
– 备份数据:使用TiDB Backup & Restore (BR)工具备份数据
– 检查兼容性:检查当前系统与目标版本的兼容性
– 制定升级计划:包括升级步骤、时间窗口、回滚计划等
– 准备升级包:下载目标版本的安装包

## 2. 升级PD集群
– 逐个升级PD节点:先升级非Leader节点,再升级Leader节点
– 验证PD集群状态:确保PD集群正常运行

## 3. 升级TiKV集群
– 逐个升级TiKV节点:按照负载顺序升级
– 验证TiKV集群状态:确保TiKV集群正常运行

## 4. 升级TiDB集群
– 逐个升级TiDB节点:按照负载顺序升级
– 验证TiDB集群状态:确保TiDB集群正常运行

## 5. 升级其他组件
– 升级TiFlash(如果使用)
– 升级TiCDC(如果使用)
– 升级监控组件(Prometheus、Grafana等)

## 6. 升级后检查
– 检查集群状态:确保所有组件正常运行
– 验证数据完整性:检查数据是否完整
– 验证业务功能:确保业务功能正常
– 性能测试:测试系统性能是否符合预期

风哥提示:版本升级是一个关键操作,需要仔细规划和执行,确保系统的稳定性和数据的安全性。学习交流加群风哥QQ113257174

Part02-生产环境规划与建议

2.1 升级前准备

升级前准备要点:

# 升级前准备

## 1. 备份数据
– 使用BR工具备份数据:
br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup”
– 备份配置文件:
cp -r /tidb/app/pd/conf /tidb/backup/pd_conf
cp -r /tidb/app/tikv/conf /tidb/backup/tikv_conf
cp -r /tidb/app/tidb/conf /tidb/backup/tidb_conf

## 2. 检查集群状态
– 检查PD状态:
pd-ctl -u http://192.168.1.10:2379 status
– 检查TiKV状态:
tikv-ctl status –host 192.168.1.20:20160
– 检查TiDB状态:
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

## 3. 检查系统资源
– 检查磁盘空间:
df -h
– 检查内存使用:
free -h
– 检查CPU负载:
top

## 4. 准备升级包
– 下载目标版本的安装包:
wget https://download.pingcap.org/tidb-6.1.1-linux-amd64.tar.gz
– 解压安装包:
tar -xzf tidb-6.1.1-linux-amd64.tar.gz
– 验证安装包完整性:
sha256sum tidb-6.1.1-linux-amd64.tar.gz

## 5. 制定升级计划
– 确定升级时间窗口:选择业务低峰期
– 制定升级步骤:详细的升级流程
– 制定回滚计划:出现问题时的回滚方案
– 分配升级任务:明确各角色的职责

## 6. 通知相关人员
– 通知业务方:升级时间和可能的影响
– 通知运维团队:升级计划和注意事项
– 通知开发团队:可能的兼容性问题学习交流加群风哥QQ113257174

2.2 兼容性检查

兼容性检查要点:

# 兼容性检查

## 1. 硬件兼容性检查
– 检查服务器硬件:
lscpu
free -h
df -h
– 检查存储设备:
lsblk
hdparm -t /dev/sda
– 检查网络设备:
ethtool eth0
ifconfig

## 2. 软件兼容性检查
– 检查操作系统版本:
cat /etc/redhat-release
– 检查依赖软件版本:
rpm -qa | grep openssl
rpm -qa | grep libcurl
– 检查应用程序兼容性:
运行应用程序测试用例

## 3. 数据兼容性检查
– 检查数据格式:
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW CREATE TABLE fgedu_users;”
– 检查索引结构:
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW INDEX FROM fgedu_users;”
– 检查配置文件:
diff /tidb/app/pd/conf/pd.toml /tidb/app/pd/conf/pd.toml.new

## 4. API兼容性检查
– 检查SQL语法:
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM fgedu_users LIMIT 1;”
– 检查客户端API:
运行客户端测试用例
– 检查系统接口:
curl http://192.168.1.10:10080/status

## 5. 性能兼容性检查
– 运行性能测试:
sysbench –test=oltp_read_only –db-driver=mysql –mysql-host=192.168.1.10 –mysql-port=4000 –mysql-user=root
–mysql-password= –mysql-db=fgedudb –tables=1 –table-size=1000000 –threads=16 –time=60 run
– 检查资源使用:
top
iostat -x 1
– 检查监控指标:
curl http://192.168.1.10:9090/api/v1/query?query=tikv_server_requests_total

2.3 回滚计划

回滚计划要点:

# 回滚计划

## 1. 回滚触发条件
– 升级过程中出现严重错误
– 升级后系统无法正常运行
– 升级后业务功能异常
– 升级后性能严重下降

## 2. 回滚步骤
– 停止当前升级操作
– 恢复备份数据:
br restore full –pd “192.168.1.10:2379” –storage “local:///tidb/backup”
– 恢复配置文件:
cp -r /tidb/backup/pd_conf/* /tidb/app/pd/conf/
cp -r /tidb/backup/tikv_conf/* /tidb/app/tikv/conf/
cp -r /tidb/backup/tidb_conf/* /tidb/app/tidb/conf/
– 重启集群:
systemctl restart pd
systemctl restart tikv
systemctl restart tidb

## 3. 回滚验证
– 检查集群状态:
pd-ctl -u http://192.168.1.10:2379 status
mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”
– 验证数据完整性:
mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT COUNT(*) FROM fgedu_users;”
– 验证业务功能:
运行业务测试用例

## 4. 回滚注意事项
– 回滚操作需要在升级失败后立即执行
– 回滚过程中需要停止所有业务操作
– 回滚后需要验证系统状态和数据完整性
– 回滚后需要分析升级失败的原因

生产环境建议:在升级前必须制定详细的回滚计划,确保在升级失败时能够快速恢复系统。更多学习教程公众号风哥教程itpux_com

Part03-生产环境项目实施方案

3.1 升级实施方案

3.1.1 小版本升级

# 小版本升级

## 1. 升级PD集群

### 1.1 停止PD服务
$ systemctl stop pd

### 1.2 替换PD二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/pd-server /tidb/app/pd/bin/

### 1.3 启动PD服务
$ systemctl start pd

### 1.4 验证PD状态
$ pd-ctl -u http://192.168.1.10:2379 status

# 输出示例
{
“header”: {
“cluster_id”: 1234567890
},
“pd”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”,
“version”: “6.1.1”
},
“members”: [
{
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”
}
],
“leader”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”
}
}

## 2. 升级TiKV集群

### 2.1 停止TiKV服务
$ systemctl stop tikv

### 2.2 替换TiKV二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/tikv-server /tidb/app/tikv/bin/

### 2.3 启动TiKV服务
$ systemctl start tikv

### 2.4 验证TiKV状态
$ tikv-ctl status –host 192.168.1.20:20160

# 输出示例
{
“server”: {
“version”: “6.1.1”,
“git_hash”: “abcdef1234567890”,
“start_timestamp”: 1620000000,
“uptime”: “1h”
},
“store”: {
“id”: 1,
“state”: “Up”,
“capacity”: “100GB”,
“available”: “80GB”,
“leader_count”: 100,
“region_count”: 1000
}
}

## 3. 升级TiDB集群

### 3.1 停止TiDB服务
$ systemctl stop tidb

### 3.2 替换TiDB二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/tidb-server /tidb/app/tidb/bin/

### 3.3 启动TiDB服务
$ systemctl start tidb

### 3.4 验证TiDB状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

# 输出示例
+—————+——–+
| Variable_name | Value |
+—————+——–+
| tidb_version | 6.1.1 |
+—————+——–+

## 4. 升级监控组件

### 4.1 停止监控服务
$ systemctl stop prometheus
$ systemctl stop grafana

### 4.2 升级监控组件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/bin/prometheus /tidb/app/prometheus/bin/
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/bin/grafana-server /tidb/app/grafana/bin/

### 4.3 启动监控服务
$ systemctl start prometheus
$ systemctl start grafana

### 4.4 验证监控状态
$ curl http://192.168.1.10:9090/status
$ curl http://192.168.1.10:3000/api/health

3.1.2 大版本升级

# 大版本升级

## 1. 升级前准备
– 备份数据:
br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup”
– 检查兼容性:
运行TiDB兼容性检查工具
– 准备升级包:
wget https://download.pingcap.org/tidb-7.0.0-linux-amd64.tar.gz
tar -xzf tidb-7.0.0-linux-amd64.tar.gz

## 2. 升级PD集群

### 2.1 停止PD服务
$ systemctl stop pd

### 2.2 替换PD二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/pd-server /tidb/app/pd/bin/

### 2.3 更新PD配置文件
$ vim /tidb/app/pd/conf/pd.toml
# 更新配置项以适应7.0.0版本

### 2.4 启动PD服务
$ systemctl start pd

### 2.5 验证PD状态
$ pd-ctl -u http://192.168.1.10:2379 status

## 3. 升级TiKV集群

### 3.1 停止TiKV服务
$ systemctl stop tikv

### 3.2 替换TiKV二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/tikv-server /tidb/app/tikv/bin/

### 3.3 更新TiKV配置文件
$ vim /tidb/app/tikv/conf/tikv.toml
# 更新配置项以适应7.0.0版本

### 3.4 启动TiKV服务
$ systemctl start tikv

### 3.5 验证TiKV状态
$ tikv-ctl status –host 192.168.1.20:20160

## 4. 升级TiDB集群

### 4.1 停止TiDB服务
$ systemctl stop tidb

### 4.2 替换TiDB二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/tidb-server /tidb/app/tidb/bin/

### 4.3 更新TiDB配置文件
$ vim /tidb/app/tidb/conf/tidb.toml
# 更新配置项以适应7.0.0版本

### 4.4 启动TiDB服务
$ systemctl start tidb

### 4.5 验证TiDB状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

## 5. 升级其他组件

### 5.1 升级TiFlash(如果使用)
$ systemctl stop tiflash
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/tiflash /tidb/app/tiflash/bin/
$ systemctl start tiflash

### 5.2 升级TiCDC(如果使用)
$ systemctl stop cdc
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/cdc /tidb/app/cdc/bin/
$ systemctl start cdc

### 5.3 升级监控组件
$ systemctl stop prometheus
$ systemctl stop grafana
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/bin/prometheus /tidb/app/prometheus/bin/
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/bin/grafana-server /tidb/app/grafana/bin/
$ systemctl start prometheus
$ systemctl start grafana

3.2 兼容性检查实施方案

3.2.1 硬件兼容性检查

# 硬件兼容性检查

## 1. 检查服务器硬件
$ lscpu

# 输出示例
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
Stepping: 7
CPU MHz: 2500.000
BogoMIPS: 5000.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 22528K
NUMA node0 CPU(s): 0-15

$ free -h

# 输出示例
total used free shared buff/cache available
Mem: 64G 10G 40G 1.0G 14G 53G
Swap: 16G 0 16G

$ df -h

# 输出示例
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 10G 40G 20% /
/dev/sdb1 500G 100G 400G 20% /tidb

## 2. 检查存储设备
$ lsblk

# 输出示例
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
└─sda1 8:1 0 50G 0 part /
sdb 8:16 0 500G 0 disk
└─sdb1 8:17 0 500G 0 part /tidb

$ hdparm -t /dev/sdb

# 输出示例
/dev/sdb:
Timing buffered disk reads: 1000 MB in 3.00 seconds = 333.33 MB/sec

## 3. 检查网络设备
$ ethtool eth0

# 输出示例
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
10000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
10000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes

$ ifconfig eth0

# 输出示例
eth0: flags=4163 mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::200:ff:fe00:0 prefixlen 64 scopeid 0x20 ether 00:00:00:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 1000000 bytes 1000000000 (953.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1000000 bytes 1000000000 (953.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0x100000000-1000fffff

3.2.2 软件兼容性检查

# 软件兼容性检查

## 1. 检查操作系统版本
$ cat /etc/redhat-release

# 输出示例
Red Hat Enterprise Linux release 8.5 (Ootpa)

## 2. 检查依赖软件版本
$ rpm -qa | grep openssl

# 输出示例
openssl-1.1.1k-7.el8_6.x86_64
openssl-libs-1.1.1k-7.el8_6.x86_64

$ rpm -qa | grep libcurl

# 输出示例
libcurl-7.61.1-18.el8.x86_64

## 3. 检查应用程序兼容性
– 运行应用程序测试用例:
./run_test.sh

# 输出示例
Test 1: Connect to database – PASS
Test 2: Insert data – PASS
Test 3: Query data – PASS
Test 4: Update data – PASS
Test 5: Delete data – PASS
All tests passed!

## 4. 检查SQL语法兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW CREATE TABLE fgedu_users;”

# 输出示例
+————+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+
| Table | Create Table |
+————+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+
| fgedu_users | CREATE TABLE `fgedu_users` (
`id` varchar(36) NOT NULL,
`name` varchar(100) NOT NULL,
`email` varchar(100) NOT NULL,
`phone` varchar(20) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
+————+—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+

$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM fgedu_users LIMIT 1;”

# 输出示例
+————————————–+——+——————+————-+———————+
| id | name | email | phone | create_time |
+————————————–+——+——————+————-+———————+
| 123e4567-e89b-12d3-a456-426614174000 | test | test@fgedu.net.cn | 13800138000 | 2024-01-01 10:00:00 |
+————————————–+——+——————+————-+———————+

3.3 升级后检查

# 升级后检查

## 1. 检查集群状态

### 1.1 检查PD状态
$ pd-ctl -u http://192.168.1.10:2379 status

# 输出示例
{
“header”: {
“cluster_id”: 1234567890
},
“pd”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”,
“version”: “7.0.0”
},
“members”: [
{
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”
}
],
“leader”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”
}
}

### 1.2 检查TiKV状态
$ tikv-ctl status –host 192.168.1.20:20160

# 输出示例
{
“server”: {
“version”: “7.0.0”,
“git_hash”: “abcdef1234567890”,
“start_timestamp”: 1620000000,
“uptime”: “1h”
},
“store”: {
“id”: 1,
“state”: “Up”,
“capacity”: “100GB”,
“available”: “80GB”,
“leader_count”: 100,
“region_count”: 1000
}
}

### 1.3 检查TiDB状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

# 输出示例
+—————+——–+
| Variable_name | Value |
+—————+——–+
| tidb_version | 7.0.0 |
+—————+——–+

## 2. 验证数据完整性

### 2.1 检查数据量
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT COUNT(*) FROM fgedu_users;”

# 输出示例
+———-+
| COUNT(*) |
+———-+
| 500000 |
+———-+

### 2.2 检查数据内容
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT * FROM fgedu_users ORDER BY create_time DESC LIMIT 5;”

# 输出示例
+————————————–+——+——————+————-+———————+
| id | name | email | phone | create_time |
+————————————–+——+——————+————-+———————+
| 123e4567-e89b-12d3-a456-426614174004 | test | test4@fgedu.net.cn | 13800138004 | 2024-01-01 10:00:04 |
| 123e4567-e89b-12d3-a456-426614174003 | test | test3@fgedu.net.cn | 13800138003 | 2024-01-01 10:00:03 |
| 123e4567-e89b-12d3-a456-426614174002 | test | test2@fgedu.net.cn | 13800138002 | 2024-01-01 10:00:02 |
| 123e4567-e89b-12d3-a456-426614174001 | test | test1@fgedu.net.cn | 13800138001 | 2024-01-01 10:00:01 |
| 123e4567-e89b-12d3-a456-426614174000 | test | test@fgedu.net.cn | 13800138000 | 2024-01-01 10:00:00 |
+————————————–+——+——————+————-+———————+

## 3. 验证业务功能

### 3.1 运行业务测试用例
$ ./run_business_test.sh

# 输出示例
Test 1: User registration – PASS
Test 2: Order creation – PASS
Test 3: Payment processing – PASS
Test 4: Inventory management – PASS
Test 5: Report generation – PASS
All business tests passed!

### 3.2 检查SQL执行性能
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SET profiling = 1; SELECT * FROM fgedu_orders WHERE user_id = 1000;
SHOW PROFILES;”

# 输出示例
+———-+————+———-+————+———————+
| id | user_id | product_id | amount | order_time |
+———-+————+———-+————+———————+
| 1000000 | 1000 | 2000 | 100.00 | 2024-01-01 10:00:00 |
+———-+————+———-+————+———————+

+———-+————+————————–+————————–+————————–+———————-+
| Query_ID | Duration | Query | Execution Engine | Execution Time | Returned Rows |
+———-+————+————————–+————————–+————————–+———————-+
| 1 | 0.001234 | SELECT * FROM fgedu_orders WHERE user_id = 1000 | TiDB | 0.001234 | 1 |
+———-+————+————————–+————————–+————————–+———————-+

## 4. 检查监控指标

### 4.1 查看Prometheus指标
$ curl http://192.168.1.10:9090/api/v1/query?query=tikv_server_requests_total

# 输出示例
{
“status”: “success”,
“data”: {
“resultType”: “vector”,
“result”: [
{
“metric”: {
“__name__”: “tikv_server_requests_total”,
“instance”: “192.168.1.20:20180”,
“job”: “tikv”,
“type”: “read”
},
“value”: [
1620000000,
“1000”
]
},
{
“metric”: {
“__name__”: “tikv_server_requests_total”,
“instance”: “192.168.1.20:20180”,
“job”: “tikv”,
“type”: “write”
},
“value”: [
1620000000,
“500”
]
}
]
}
}

### 4.2 查看Grafana面板
– 访问Grafana:http://192.168.1.10:3000
– 查看TiDB Dashboard,检查各项指标是否正常

风哥提示:升级后检查是确保系统正常运行的关键步骤,需要仔细检查集群状态、数据完整性和业务功能。from tidb视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 小版本升级

4.1.1 小版本升级实战

# 小版本升级实战

## 1. 升级前准备

### 1.1 备份数据
$ br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup”

# 输出示例
2024-01-01 10:00:00.000 INFO [backup] full backup start
2024-01-01 10:00:00.000 INFO [backup] backup metadata
2024-01-01 10:00:01.000 INFO [backup] backup data
2024-01-01 10:00:10.000 INFO [backup] backup success

### 1.2 检查集群状态
$ pd-ctl -u http://192.168.1.10:2379 status

# 输出示例
{
“header”: {
“cluster_id”: 1234567890
},
“pd”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”,
“version”: “6.1.0”
}
}

$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

# 输出示例
+—————+——–+
| Variable_name | Value |
+—————+——–+
| tidb_version | 6.1.0 |
+—————+——–+

## 2. 升级PD集群

### 2.1 停止PD服务
$ systemctl stop pd

### 2.2 替换PD二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/pd-server /tidb/app/pd/bin/

### 2.3 启动PD服务
$ systemctl start pd

### 2.4 验证PD状态
$ pd-ctl -u http://192.168.1.10:2379 status

# 输出示例
{
“header”: {
“cluster_id”: 1234567890
},
“pd”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”,
“version”: “6.1.1”
}
}

## 3. 升级TiKV集群

### 3.1 停止TiKV服务
$ systemctl stop tikv

### 3.2 替换TiKV二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/tikv-server /tidb/app/tikv/bin/

### 3.3 启动TiKV服务
$ systemctl start tikv

### 3.4 验证TiKV状态
$ tikv-ctl status –host 192.168.1.20:20160

# 输出示例
{
“server”: {
“version”: “6.1.1”,
“git_hash”: “abcdef1234567890”,
“start_timestamp”: 1620000000,
“uptime”: “1h”
}
}

## 4. 升级TiDB集群

### 4.1 停止TiDB服务
$ systemctl stop tidb

### 4.2 替换TiDB二进制文件
$ cp /tidb/upgrade/tidb-6.1.1-linux-amd64/tidb-server /tidb/app/tidb/bin/

### 4.3 启动TiDB服务
$ systemctl start tidb

### 4.4 验证TiDB状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

# 输出示例
+—————+——–+
| Variable_name | Value |
+—————+——–+
| tidb_version | 6.1.1 |
+—————+——–+

## 5. 升级后检查

### 5.1 检查集群状态
$ pd-ctl -u http://192.168.1.10:2379 status
$ tikv-ctl status –host 192.168.1.20:20160
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

### 5.2 验证数据完整性
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT COUNT(*) FROM fgedu_users;”

# 输出示例
+———-+
| COUNT(*) |
+———-+
| 500000 |
+———-+

### 5.3 验证业务功能
$ ./run_business_test.sh

# 输出示例
Test 1: User registration – PASS
Test 2: Order creation – PASS
Test 3: Payment processing – PASS
Test 4: Inventory management – PASS
Test 5: Report generation – PASS
All business tests passed!

4.2 大版本升级

4.2.1 大版本升级实战

# 大版本升级实战

## 1. 升级前准备

### 1.1 备份数据
$ br backup full –pd “192.168.1.10:2379” –storage “local:///tidb/backup”

# 输出示例
2024-01-01 10:00:00.000 INFO [backup] full backup start
2024-01-01 10:00:00.000 INFO [backup] backup metadata
2024-01-01 10:00:01.000 INFO [backup] backup data
2024-01-01 10:00:10.000 INFO [backup] backup success

### 1.2 检查兼容性
$ ./tidb-compatibility-check.sh

# 输出示例
Compatibility check passed! No major issues found.

### 1.3 准备升级包
$ wget https://download.pingcap.org/tidb-7.0.0-linux-amd64.tar.gz
$ tar -xzf tidb-7.0.0-linux-amd64.tar.gz

## 2. 升级PD集群

### 2.1 停止PD服务
$ systemctl stop pd

### 2.2 替换PD二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/pd-server /tidb/app/pd/bin/

### 2.3 更新PD配置文件
$ vim /tidb/app/pd/conf/pd.toml
# 更新配置项以适应7.0.0版本

### 2.4 启动PD服务
$ systemctl start pd

### 2.5 验证PD状态
$ pd-ctl -u http://192.168.1.10:2379 status

# 输出示例
{
“header”: {
“cluster_id”: 1234567890
},
“pd”: {
“id”: 1,
“name”: “pd-1”,
“client_urls”: “http://192.168.1.10:2379”,
“peer_urls”: “http://192.168.1.10:2380”,
“version”: “7.0.0”
}
}

## 3. 升级TiKV集群

### 3.1 停止TiKV服务
$ systemctl stop tikv

### 3.2 替换TiKV二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/tikv-server /tidb/app/tikv/bin/

### 3.3 更新TiKV配置文件
$ vim /tidb/app/tikv/conf/tikv.toml
# 更新配置项以适应7.0.0版本

### 3.4 启动TiKV服务
$ systemctl start tikv

### 3.5 验证TiKV状态
$ tikv-ctl status –host 192.168.1.20:20160

# 输出示例
{
“server”: {
“version”: “7.0.0”,
“git_hash”: “abcdef1234567890”,
“start_timestamp”: 1620000000,
“uptime”: “1h”
}
}

## 4. 升级TiDB集群

### 4.1 停止TiDB服务
$ systemctl stop tidb

### 4.2 替换TiDB二进制文件
$ cp /tidb/upgrade/tidb-7.0.0-linux-amd64/tidb-server /tidb/app/tidb/bin/

### 4.3 更新TiDB配置文件
$ vim /tidb/app/tidb/conf/tidb.toml
# 更新配置项以适应7.0.0版本

### 4.4 启动TiDB服务
$ systemctl start tidb

### 4.5 验证TiDB状态
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

# 输出示例
+—————+——–+
| Variable_name | Value |
+—————+——–+
| tidb_version | 7.0.0 |
+—————+——–+

## 5. 升级后检查

### 5.1 检查集群状态
$ pd-ctl -u http://192.168.1.10:2379 status
$ tikv-ctl status –host 192.168.1.20:20160
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SHOW STATUS LIKE ‘tidb_version’;”

### 5.2 验证数据完整性
$ mysql -h 192.168.1.10 -P 4000 -u root -e “SELECT COUNT(*) FROM fgedu_users;”

# 输出示例
+———-+
| COUNT(*) |
+———-+
| 500000 |
+———-+

### 5.3 验证业务功能
$ ./run_business_test.sh

# 输出示例
Test 1: User registration – PASS
Test 2: Order creation – PASS
Test 3: Payment processing – PASS
Test 4: Inventory management – PASS
Test 5: Report generation – PASS
All business tests passed!

### 5.4 性能测试
$ sysbench –test=oltp_read_only –db-driver=mysql –mysql-host=192.168.1.10 –mysql-port=4000 –mysql-user=root
–mysql-password= –mysql-db=fgedudb –tables=1 –table-size=1000000 –threads=16 –time=60 run

# 输出示例
sysbench 1.0.20 (using system LuaJIT 2.0.5)

Running the test with following options:
Number of threads: 16

Initializing random number generator from current time

Initializing worker threads…

Threads started!

SQL statistics:
queries performed:
read: 160000
write: 0
other: 22857
total: 182857
transactions:
total: 11428 (190.47 per sec.)
read/write requests:
total: 160000 (2666.67 per sec.)
time spent:
total: 60.0000s
waiting on locks: 0.0000s

Threads fairness:
events (avg/stddev): 714.2500/12.34
execution time (avg/stddev): 60.0000/0.00

4.3 兼容性测试

4.3.1 兼容性测试实战

# 兼容性测试实战

## 1. 准备测试环境

### 1.1 部署测试集群
– 部署一个与生产环境相同配置的测试集群
– 导入生产环境的测试数据

### 1.2 准备测试工具
– 安装sysbench:
yum install sysbench
– 安装MySQL客户端:
yum install mysql

## 2. 运行兼容性测试

### 2.1 测试SQL语法兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
CREATE TABLE fgedu_test (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
created_at DATETIME
);
INSERT INTO fgedu_test VALUES (1, ‘test’, 18, NOW());
SELECT * FROM fgedu_test;
UPDATE fgedu_test SET age = 19 WHERE id = 1;
DELETE FROM fgedu_test WHERE id = 1;

# 输出示例
+—-+——+——+———————+
| id | name | age | created_at |
+—-+——+——+———————+
| 1 | test | 18 | 2024-01-01 10:00:00 |
+—-+——+——+———————+

### 2.2 测试索引兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
CREATE INDEX idx_name ON fgedu_test (name);
SHOW INDEX FROM fgedu_test;
EXPLAIN SELECT * FROM fgedu_test WHERE name = ‘test’;

# 输出示例
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null
| Index_type | Comment |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+
| fgedu_test | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | |
| fgedu_test | 1 | idx_name | 1 | name | A | 0 | NULL | NULL | YES | BTREE | |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+

+————————-+———-+———–+————————+——————————–+—————+———+——————————–+——+———-+
| id | estRows | task | access object | operator info | memory | disk | execution info | cost | rows |
+————————-+———-+———–+————————+——————————–+—————+———+——————————–+——+———-+
| IndexLookUp_10 | 1.00 | root | | | 32.77 KB | N/A | time:0.1ms, loops:2, rows:0 | 10.00 | 0 |
| ├─IndexRangeScan_8 | 1.00 | cop[tikv] | table:fgedu_test, index:idx_name(name) | range:[test,test], keep
order:false | N/A | N/A | time:0.1ms, loops:1, rows:0 | 10.00 | 0 |
| └─TableRowIDScan_9 | 1.00 | cop[tikv] | table:fgedu_test | | N/A | N/A | time:0.1ms, loops:1, rows:0 | 10.00 | 0
|
+————————-+———-+———–+————————+——————————–+—————+———+——————————–+——+———-+

### 2.3 测试存储过程兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
DELIMITER //
CREATE PROCEDURE fgedu_test_proc()
BEGIN
SELECT ‘Hello, TiDB!’;
END //
DELIMITER ;
CALL fgedu_test_proc();

# 输出示例
+—————-+
| Hello, TiDB! |
+—————-+
| Hello, TiDB! |
+—————-+

### 2.4 测试触发器兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
CREATE TABLE fgedu_test_log (
id INT PRIMARY KEY AUTO_INCREMENT,
message VARCHAR(255),
created_at DATETIME
);
DELIMITER //
CREATE TRIGGER fgedu_test_trigger BEFORE INSERT ON fgedu_test
FOR EACH ROW
BEGIN
INSERT INTO fgedu_test_log (message, created_at) VALUES (‘New record inserted’, NOW());
END //
DELIMITER ;
INSERT INTO fgedu_test VALUES (1, ‘test’, 18, NOW());
SELECT * FROM fgedu_test_log;

# 输出示例
+—-+———————+———————+
| id | message | created_at |
+—-+———————+———————+
| 1 | New record inserted | 2024-01-01 10:00:00 |
+—-+———————+———————+

### 2.5 测试函数兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
DELIMITER //
CREATE FUNCTION fgedu_test_func(a INT, b INT) RETURNS INT
BEGIN
RETURN a + b;
END //
DELIMITER ;
SELECT fgedu_test_func(1, 2);

# 输出示例
+——————–+
| fgedu_test_func(1, 2) |
+——————–+
| 3 |
+——————–+

## 3. 性能测试

### 3.1 运行OLTP测试
$ sysbench –test=oltp_read_write –db-driver=mysql –mysql-host=192.168.1.10 –mysql-port=4000 –mysql-user=root
–mysql-password= –mysql-db=fgedudb –tables=1 –table-size=1000000 –threads=16 –time=60 run

# 输出示例
sysbench 1.0.20 (using system LuaJIT 2.0.5)

Running the test with following options:
Number of threads: 16

Initializing random number generator from current time

Initializing worker threads…

Threads started!

SQL statistics:
queries performed:
read: 160000
write: 45714
other: 22857
total: 228571
transactions:
total: 11428 (190.47 per sec.)
time spent:
total: 60.0000s
waiting on locks: 0.0000s

Threads fairness:
events (avg/stddev): 714.2500/12.34
execution time (avg/stddev): 60.0000/0.00

### 3.2 运行分析查询测试
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
SET profiling = 1;
SELECT COUNT(*), AVG(age) FROM fgedu_test GROUP BY name;
SHOW PROFILES;

# 输出示例
+———-+———-+
| COUNT(*) | AVG(age) |
+———-+———-+
| 1 | 18.0000 |
+———-+———-+

+———-+————+———————————————-+————————–+————————–+———————-+
| Query_ID | Duration | Query | Execution Engine | Execution Time | Returned Rows |
+———-+————+———————————————-+————————–+————————–+———————-+
| 1 | 0.001234 | SELECT COUNT(*), AVG(age) FROM fgedu_test GROUP BY name | TiDB | 0.001234 | 1 |
+———-+————+———————————————-+————————–+————————–+———————-+

Part05-风哥经验总结与分享

5.1 最佳实践

版本升级的最佳实践:

版本升级最佳实践:

  • 制定详细的升级计划:包括升级步骤、时间窗口、回滚计划等
  • 备份数据:在升级前使用BR工具备份所有数据
  • 先在测试环境测试:在生产环境升级前,先在测试环境验证升级过程
  • 选择合适的升级时间:选择业务低峰期进行升级
  • 逐个组件升级:按照PD → TiKV → TiDB的顺序升级
  • 升级后全面检查:检查集群状态、数据完整性和业务功能
  • 保持监控:升级后密切监控系统状态,确保稳定运行

5.2 常见问题与解决方案

版本升级过程中的常见问题与解决方案:

# 常见问题与解决方案

## 1. 升级过程中服务无法启动
– **问题描述**:升级后服务无法启动
– **原因分析**:配置文件不兼容、二进制文件损坏、端口被占用
– **解决方案**:
– 检查配置文件,确保与目标版本兼容
– 重新下载并验证二进制文件
– 检查端口占用情况,释放端口

## 2. 升级后数据丢失
– **问题描述**:升级后部分数据丢失
– **原因分析**:备份不完整、升级过程中出现错误
– **解决方案**:
– 使用备份数据恢复
– 检查数据一致性,修复损坏的数据

## 3. 升级后性能下降
– **问题描述**:升级后系统性能明显下降
– **原因分析**:配置参数不优化、新特性不适应
– **解决方案**:
– 调整配置参数,优化系统性能
– 关闭不必要的新特性
– 进行性能测试,找出瓶颈

## 4. 升级后业务功能异常
– **问题描述**:升级后业务功能无法正常使用
– **原因分析**:SQL语法不兼容、API变更
– **解决方案**:
– 检查SQL语法,修改不兼容的语句
– 更新客户端API,适应新的接口
– 测试业务功能,确保正常运行

## 5. 升级后监控异常
– **问题描述**:升级后监控系统无法正常工作
– **原因分析**:监控组件版本不兼容、监控配置变更
– **解决方案**:
– 升级监控组件到兼容版本
– 更新监控配置,适应新的指标
– 验证监控系统是否正常采集数据

5.3 升级技巧

版本升级的实用技巧:

# 升级技巧

## 1. 小版本升级技巧
– **快速升级**:小版本升级可以快速完成,不需要太长的时间窗口
– **滚动升级**:可以采用滚动升级的方式,减少服务中断时间
– **自动升级**:可以编写自动化脚本,实现一键升级

## 2. 大版本升级技巧
– **充分测试**:大版本升级前需要充分测试,确保兼容性
– **分阶段升级**:可以分阶段升级,先升级部分组件,验证后再升级其他组件
– **准备回滚方案**:大版本升级风险较高,需要准备详细的回滚方案

## 3. 兼容性检查技巧
– **使用官方工具**:使用TiDB官方提供的兼容性检查工具
– **全面检查**:检查硬件、软件、数据、API和性能等各个方面
– **建立检查清单**:建立详细的兼容性检查清单,确保不遗漏任何检查项

## 4. 升级后优化技巧
– **性能调优**:升级后进行性能调优,确保系统性能达到最佳状态
– **监控优化**:优化监控系统,及时发现和解决问题
– **备份策略**:更新备份策略,确保数据安全

## 5. 故障处理技巧
– **快速定位**:升级过程中出现故障时,快速定位问题原因
– **及时回滚**:当出现严重问题时,及时执行回滚操作
– **事后分析**:升级完成后,分析升级过程中的问题,总结经验教训

风哥提示:版本升级是一个复杂的过程,需要仔细规划和执行,确保系统的稳定性和数据的安全性。更多学习教程公众号风哥教程itpux_com

总结

本文档详细介绍了TiDB版本升级与兼容性检查的各个方面,包括基础概念、生产环境规划、实施方案、实战案例和经验分享。通过本文档的学习,读者可以掌握TiDB版本升级的完整流程和最佳实践,确保升级过程的顺利进行。学习交流加群风哥QQ113257174

| └─TableRowIDScan_9 | 1.00 | cop[tikv] | table:fgedu_test | | N/A | N/A | time:0.1ms, loops:1, rows:0 | 10.00 | 0 |
+————————-+———-+———–+————————+——————————–+—————+———+——————————–+——+———-+

### 2.3 测试存储过程兼容性
$ mysql -h 192.168.1.10 -P 4000 -u root -e ”
DELIMITER //
CREATE PROCEDURE test_procedure()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 10 DO INSERT INTO fgedu_test VALUES (i, CONCAT('test', i), i + 10, NOW()); SET i=i + 1; END WHILE; END // DELIMITER ; CALL test_procedure(); SELECT * FROM fgedu_test; " # 输出示例 +----+-------+------+---------------------+ | id | name | age | created_at | +----+-------+------+---------------------+ | 1 | test1 | 11 | 2024-01-01 10:00:00 | | 2 | test2 | 12 | 2024-01-01 10:00:00 | | 3 | test3 | 13 | 2024-01-01 10:00:00 | | 4 | test4 | 14 | 2024-01-01 10:00:00 | | 5 | test5 | 15 | 2024-01-01 10:00:00 | | 6 | test6 | 16 | 2024-01-01 10:00:00 | | 7 | test7 | 17 | 2024-01-01 10:00:00 | | 8 | test8 | 18 | 2024-01-01 10:00:00 | | 9 | test9 | 19 | 2024-01-01 10:00:00 | | 10 | test10 | 20 | 2024-01-01 10:00:00 | +----+-------+------+---------------------+ ### 2.4 测试触发器兼容性 $ mysql -h 192.168.1.10 -P 4000 -u root -e " CREATE TABLE fgedu_test_log ( id INT PRIMARY KEY AUTO_INCREMENT, action VARCHAR(100), created_at DATETIME ); DELIMITER // CREATE TRIGGER test_trigger AFTER INSERT ON fgedu_test FOR EACH ROW BEGIN INSERT INTO fgedu_test_log (action, created_at) VALUES ('insert', NOW()); END // DELIMITER ; INSERT INTO fgedu_test VALUES (11, 'test11' , 21, NOW()); SELECT * FROM fgedu_test_log; " # 输出示例 +----+--------+---------------------+ | id | action | created_at | +----+--------+---------------------+ | 1 | insert | 2024-01-01 10:00:00 | +----+--------+---------------------+ ### 2.5 测试函数兼容性 $ mysql -h 192.168.1.10 -P 4000 -u root -e " DELIMITER // CREATE FUNCTION test_function(p_id INT) RETURNS VARCHAR(100) BEGIN DECLARE v_name VARCHAR(100); SELECT name INTO v_name FROM fgedu_test WHERE id=p_id; RETURN v_name; END // DELIMITER ; SELECT test_function(1); " # 输出示例 +------------------+ | test_function(1) | +------------------+ |

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息