Skip to content

OceanBase 升级验证

升级验证流程

1. 升级后基础验证

1.1 集群状态验证

sql
-- 检查集群状态
SELECT * FROM oceanbase.GV$OB_CLUSTER_STATUS;

-- 检查节点状态
SELECT * FROM oceanbase.GV$OB_SERVER_STATUS WHERE status != 'ACTIVE';

-- 检查副本状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE status != 'NORMAL';

-- 检查租户状态
SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE status != 'TENANT_STATUS_NORMAL';

1.2 版本验证

sql
-- 检查 OceanBase 版本
SELECT version();

-- 检查 OBProxy 版本
SHOW PROXYINFO;

-- 检查集群版本一致性
SELECT DISTINCT version FROM oceanbase.GV$OB_SERVERS;

1.3 服务可用性验证

bash
# 测试 MySQL 协议连接
mysql -h127.0.0.1 -P2881 -uroot -ppassword -D oceanbase -e "SELECT 1;"

# 测试 RPC 连接
obclient -h127.0.0.1 -P2882 -uroot@sys#obcluster -ppassword -c -A oceanbase -e "SELECT 1;"

# 测试 OBProxy 连接
mysql -h127.0.0.1 -P2883 -uroot@sys#obcluster -ppassword -D oceanbase -e "SELECT 1;"

2. 数据一致性验证

2.1 表级数据验证

sql
-- 检查表行数
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'database_name';

-- 执行表校验和
CHECKSUM TABLE table_name;

-- 比较升级前后的表校验和
-- 升级前记录:CHECKSUM TABLE table_name;
-- 升级后验证:CHECKSUM TABLE table_name;

2.2 业务数据抽样验证

sql
-- 抽取关键业务表数据进行验证
SELECT * FROM business_table WHERE id IN (1, 100, 1000, 10000) LIMIT 10;

-- 验证业务数据的完整性
SELECT COUNT(*) FROM business_table WHERE critical_field IS NULL;

-- 验证业务数据的一致性
SELECT SUM(amount) FROM transaction_table WHERE status = 'completed';

2.3 副本数据一致性验证

sql
-- 查看副本同步状态
SELECT * FROM oceanbase.GV$OB_REPLICA_STATUS WHERE sync_lag > 0;

-- 在不同节点查询相同数据
-- 在节点1执行:SELECT * FROM table_name WHERE id = 1;
-- 在节点2执行:SELECT * FROM table_name WHERE id = 1;
-- 比较结果是否一致

3. 功能验证

3.1 核心功能验证

sql
-- 测试 DML 操作
INSERT INTO test_table VALUES (1, 'test');
UPDATE test_table SET name = 'updated' WHERE id = 1;
DELETE FROM test_table WHERE id = 1;

-- 测试 DDL 操作
CREATE TABLE test_ddl (id INT PRIMARY KEY, name VARCHAR(50));
ALTER TABLE test_ddl ADD COLUMN age INT;
DROP TABLE test_ddl;

-- 测试事务操作
BEGIN;
INSERT INTO test_table VALUES (2, 'transaction');
UPDATE test_table SET name = 'committed' WHERE id = 2;
COMMIT;

-- 测试回滚操作
BEGIN;
INSERT INTO test_table VALUES (3, 'rollback');
ROLLBACK;
SELECT * FROM test_table WHERE id = 3;

3.2 高级功能验证

sql
-- 测试分区表功能
CREATE TABLE partition_test (
    id INT PRIMARY KEY,
    created_at DATE
) PARTITION BY RANGE (created_at) (
    PARTITION p2023 VALUES LESS THAN ('2024-01-01'),
    PARTITION p2024 VALUES LESS THAN ('2025-01-01')
);
INSERT INTO partition_test VALUES (1, '2023-06-01');
SELECT * FROM partition_test PARTITION (p2023);
DROP TABLE partition_test;

-- 测试索引功能
CREATE INDEX idx_name ON test_table(name);
EXPLAIN SELECT * FROM test_table WHERE name = 'test';
DROP INDEX idx_name ON test_table;

-- 测试视图功能
CREATE VIEW test_view AS SELECT * FROM test_table;
SELECT * FROM test_view;
DROP VIEW test_view;

4. 性能验证

4.1 基准性能测试

bash
# 使用 sysbench 进行基准性能测试
# 准备测试数据
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=2881 --mysql-user=root --mysql-password=password --mysql-db=test_db --table-size=1000000 --tables=10 --threads=16 prepare

# 运行测试
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=2881 --mysql-user=root --mysql-password=password --mysql-db=test_db --table-size=1000000 --tables=10 --threads=16 --time=300 run

# 清理测试数据
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=2881 --mysql-user=root --mysql-password=password --mysql-db=test_db --table-size=1000000 --tables=10 --threads=16 cleanup

4.2 业务 SQL 性能测试

sql
-- 测试关键业务 SQL 的执行计划
EXPLAIN SELECT * FROM business_table WHERE condition;

-- 测试关键业务 SQL 的执行时间
SET profiling = 1;
SELECT * FROM business_table WHERE condition;
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1;
SET profiling = 0;

4.3 系统资源监控

sql
-- 监控 CPU 使用率
SELECT * FROM oceanbase.GV$OB_SERVER_STATUS WHERE cpu_total > 80;

-- 监控内存使用率
SELECT * FROM oceanbase.GV$OB_SERVER_STATUS WHERE mem_total > 80;

-- 监控磁盘 I/O
SELECT * FROM oceanbase.GV$OB_DISK_STATUS WHERE io_utilization > 80;

-- 监控网络流量
SELECT * FROM oceanbase.GV$OB_NETWORK_STATUS WHERE send_throughput > 100 OR recv_throughput > 100;

5. 安全性验证

5.1 权限验证

sql
-- 验证用户权限
SHOW GRANTS FOR 'user_name';

-- 测试用户权限
-- 使用普通用户连接数据库,测试是否只能访问授权的数据库和表

-- 验证管理员权限
-- 使用管理员账户执行敏感操作,验证权限是否正常

5.2 加密验证

sql
-- 验证 SSL 连接
SHOW STATUS LIKE 'Ssl_cipher';

-- 验证数据加密
SELECT table_name, encrypted FROM information_schema.tables WHERE table_schema = 'test_db';

-- 测试加密表操作
INSERT INTO encrypted_table VALUES (1, 'test');
SELECT * FROM encrypted_table;

升级验证报告

1. 验证摘要

验证项验证结果备注
集群状态PASS/FAIL详细描述
版本一致性PASS/FAIL详细描述
服务可用性PASS/FAIL详细描述
数据一致性PASS/FAIL详细描述
核心功能PASS/FAIL详细描述
高级功能PASS/FAIL详细描述
基准性能PASS/FAIL详细描述
业务性能PASS/FAIL详细描述
安全性PASS/FAIL详细描述

2. 详细验证结果

2.1 集群状态验证

  • 节点状态:所有节点状态正常
  • 副本状态:所有副本状态正常
  • 租户状态:所有租户状态正常

2.2 版本验证

  • OceanBase 版本:4.1.0.0
  • OBProxy 版本:4.1.0.0
  • 集群版本一致性:所有节点版本一致

2.3 数据一致性验证

  • 表行数:与升级前一致
  • 表校验和:与升级前一致
  • 业务数据抽样:数据完整一致
  • 副本数据:所有副本数据一致

2.4 功能验证

  • DML 操作:正常
  • DDL 操作:正常
  • 事务操作:正常
  • 高级功能:正常

2.5 性能验证

  • 基准性能:与升级前相当或有所提升
  • 业务 SQL 性能:与升级前相当或有所提升
  • 系统资源使用率:在正常范围内

2.6 安全性验证

  • 权限验证:正常
  • 加密验证:正常

3. 问题与解决方案

问题描述解决方案解决结果
问题1解决方案1解决结果1
问题2解决方案2解决结果2

升级验证最佳实践

1. 验证准备

  1. 制定验证计划:详细规划验证内容、步骤和负责人
  2. 准备验证环境:确保验证环境与生产环境一致
  3. 准备验证工具:准备基准测试工具、监控工具等
  4. 备份数据:在验证前备份数据,防止验证过程中数据损坏
  5. 准备回滚方案:制定详细的回滚方案,确保在验证失败时能够快速回滚

2. 验证执行

  1. 按照计划执行:严格按照验证计划执行,确保覆盖所有验证项
  2. 记录详细结果:详细记录每个验证项的执行结果
  3. 及时处理问题:发现问题及时处理,确保验证顺利进行
  4. 验证充分:确保验证充分,覆盖所有关键功能和场景
  5. 多人验证:建议多人参与验证,提高验证的准确性和完整性

3. 验证后处理

  1. 生成验证报告:详细记录验证结果,生成验证报告
  2. 总结经验教训:总结验证过程中的经验教训,为后续升级提供参考
  3. 优化升级流程:根据验证结果优化升级流程,提高升级的成功率
  4. 更新文档:根据验证结果更新升级文档,确保文档的准确性
  5. 通知相关方:将验证结果通知相关方,确保业务方了解升级情况

常见问题(FAQ)

Q1: 升级验证失败怎么办?

A1: 升级验证失败时,可以尝试以下操作:

  1. 分析验证失败的原因
  2. 根据失败原因采取相应的修复措施
  3. 重新进行验证
  4. 如果无法修复,执行回滚操作
sql
-- 查看验证失败的具体原因
-- 例如,查看集群状态
SELECT * FROM oceanbase.GV$OB_CLUSTER_STATUS;

-- 查看错误日志
-- 查看 OceanBase 日志
tail -f /home/admin/oceanbase/log/observer.log

-- 执行回滚操作
-- 使用 OBD 回滚
obd cluster rollback cluster.yaml

Q2: 如何验证数据一致性?

A2: 可以通过以下方式验证数据一致性:

  1. 比较升级前后的表行数
  2. 执行表校验和比较
  3. 对关键业务数据进行抽样验证
  4. 在不同节点查询相同数据,比较结果
  5. 使用 OceanBase 内置的数据一致性检查工具
sql
-- 比较表行数
SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'test_db';

-- 执行表校验和
CHECKSUM TABLE table_name;

-- 抽样验证
SELECT * FROM business_table WHERE id IN (1, 100, 1000);

Q3: 如何验证性能是否符合要求?

A3: 可以通过以下方式验证性能是否符合要求:

  1. 运行基准性能测试,比较升级前后的性能
  2. 测试关键业务 SQL 的执行时间,比较升级前后的性能
  3. 监控系统资源使用率,确保在正常范围内
  4. 测试业务负载下的性能,确保能够满足业务需求
bash
# 运行基准性能测试
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=127.0.0.1 --mysql-port=2881 --mysql-user=root --mysql-password=password --mysql-db=test_db --table-size=1000000 --tables=10 --threads=16 run

Q4: 升级验证需要多长时间?

A4: 升级验证的时间取决于集群规模、业务复杂度和验证内容。一般来说:

  • 小型集群(< 10 节点):1-2 天
  • 中型集群(10-50 节点):2-3 天
  • 大型集群(> 50 节点):3-5 天

Q5: 如何确保升级验证的准确性?

A5: 可以通过以下方式确保升级验证的准确性:

  1. 制定详细的验证计划,覆盖所有关键功能和场景
  2. 使用自动化工具进行验证,减少人为错误
  3. 多人参与验证,提高验证的准确性和完整性
  4. 详细记录验证结果,便于后续分析
  5. 对验证结果进行交叉验证,确保结果的准确性
sql
-- 使用自动化脚本进行验证
-- 例如,编写脚本自动验证所有表的行数和校验和

-- 交叉验证
-- 由不同的人执行相同的验证项,比较结果