一、前置准备
| 检查项 | 操作步骤 | 预期结果 | |
|---|---|---|---|
| 记录版本信息 | 1. Mycat 版本:/usr/local/mycat/bin/mycat version
2. MySQL 版本: |
明确 Mycat/MySQL 版本(如 Mycat 1.6.7.6 + MySQL 8.0.33) | |
| 确认 JDK 版本 | java -version |
Mycat 1.6.x 需 JDK 8;Mycat 2.0.x 需 JDK 8/11 | |
| 检查 Mycat 驱动版本 | `ls -l /usr/local/mycat/lib | grep mysql-connector-java` | Mycat 1.6.x + MySQL 8.0 需驱动 ≥8.0;Mycat 2.0.x 无需手动改 |
二、基础连接与认证验证(核心第一步)
| 验证项 | 操作步骤 | 预期结果 | 异常处理方案 |
|---|---|---|---|
| MySQL 账号认证方式 | 登录 MySQL 执行:
|
Mycat 1.6.x 需 plugin=mysql_native_password;Mycat 2.0.x 支持 caching_sha2_password |
若为 caching_sha2_password(MySQL 8.0 默认):
1. Mycat 1.6.x: 2. 刷新权限: |
| Mycat 连接 MySQL | 用 Mycat 端口连接:
|
成功进入 Mycat 命令行,无 认证失败 报错 |
报错 Client does not support authentication protocol:
1. 替换 Mycat 驱动为 8.0+ 版本; 2. 调整 MySQL 账号认证方式 |
| 切换逻辑库 | 连接 Mycat 后执行:use mycat_db; |
无报错,成功切换到逻辑库 | 报错 Unknown database:检查 schema.xml 中逻辑库名配置 |
三、核心功能兼容性验证(业务场景适配)
1. 基础 DDL/DML 操作(必验)
| 验证项 | 操作步骤(Mycat 命令行执行) | 预期结果 | 异常处理方案 |
|---|---|---|---|
| 创建表 | CREATE TABLE test_compat (id INT PRIMARY KEY, name VARCHAR(50), create_time DATETIME); |
无报错,MySQL 真实库中同步创建该表 | 报错 Syntax error:检查 SQL 语法是否兼容 Mycat 版本 |
| 插入数据 | INSERT INTO test_compat (id, name, create_time) VALUES (1, 'test1', NOW()), (2, 'test2', NOW()); |
无报错,数据插入成功 | 报错 Duplicate key:检查主键自增配置;
报错 |
| 查询数据 | SELECT * FROM test_compat; |
正常返回插入的 2 条数据 | 数据不全:检查 schema.xml 分片规则配置;
无数据:检查 MySQL 主从同步(读写分离场景) |
| 更新 / 删除数据 | UPDATE test_compat SET name='test1_update' WHERE id=1;
|
无报错,查询验证数据已更新 / 删除 | 报错 Table not found:检查 schema.xml 逻辑表与真实表映射 |
| 删除表 | DROP TABLE test_compat; |
无报错,MySQL 真实库中表被删除 | 报错 Permission denied:检查 MySQL 账号是否有 DROP 权限 |
2. 读写分离验证(若使用该功能)
| 验证项 | 操作步骤 | 预期结果 | 异常处理方案 |
|---|---|---|---|
| 主库写数据 | 1. Mycat 执行:INSERT INTO test_compat (id, name) VALUES (3, 'master_test');
2. 登录 MySQL 主库查询该表 |
主库中能查到该数据,从库同步(主从复制正常) | 从库无数据:检查 MySQL 主从同步状态(show slave status\G) |
| 从库读数据 | 1. 开启 MySQL 从库通用日志:set global general_log=on;
2. Mycat 执行: 3. 查看从库日志: |
从库日志中有该 SELECT 操作记录,主库无 | 读请求仍走主库:
1. 检查 2. 确认 |
3. 分库分表验证(若使用该功能)
| 验证项 | 操作步骤 | 预期结果 | 异常处理方案 |
|---|---|---|---|
| 按分片规则插入数据 | 假设按 id 取模分 2 库,执行:
|
id%2=0 存 dn1(db1),id%2=1 存 dn2(db2) | 数据分布错误:检查 rule.xml 分片规则 count 与 dataNode 数量一致 |
| 聚合查询 | Mycat 执行:SELECT * FROM user; |
正常返回所有分片数据,无缺失 | 数据缺失:检查 schema.xml 中逻辑表 dataNode 配置 |
4. 事务兼容性验证
| 验证项 | 操作步骤 | 预期结果 | 异常处理方案 |
|---|---|---|---|
| 提交事务 | BEGIN;
|
事务提交成功,数据持久化 | 报错 Transaction error:检查 Mycat 事务配置(server.xml 中 defaultTxIsolation) |
| 回滚事务 | BEGIN;
|
无该数据,事务回滚成功 | 回滚失败:检查 MySQL 存储引擎是否为 InnoDB(MyISAM 不支持事务) |
四、SQL 语法兼容性验证(针对 MySQL 新特性)
| MySQL 语法特性 | 验证 SQL(Mycat 执行) | Mycat 1.6.x 支持性 | Mycat 2.0.x 支持性 | 异常处理方案 |
|---|---|---|---|---|
| 窗口函数(MySQL 8.0) | SELECT id, name, ROW_NUMBER() OVER (ORDER BY id) AS rn FROM test_compat; |
不支持(报错) | 支持(正常返回结果) | 业务需用该语法:升级 Mycat 到 2.0.x;或直接连接 MySQL 执行 |
| JSON 类型操作 | CREATE TABLE test_json (id INT, info JSON);
|
基础支持(创建 / 插入),复杂查询不支持 | 完全支持 | 复杂 JSON 查询失败:简化 SQL 或升级 Mycat |
| 递归查询(WITH RECURSIVE) | WITH RECURSIVE cte (n) AS (SELECT 1 UNION ALL SELECT n+1 FROM cte WHERE n<3) SELECT * FROM cte; |
不支持(报错) | 支持 | 业务需用:升级 Mycat 2.0.x |
五、故障兜底检查(稳定性验证)
| 检查项 | 操作步骤 | 预期结果 | 异常处理方案 |
|---|---|---|---|
| Mycat 心跳检测 | 1. 连接 Mycat 管理端口:mysql -h127.0.0.1 -umycat_app -p123456 -P9066
2. 执行: |
所有 dataNode 状态为 UP |
状态为 DOWN:检查 MySQL 节点连接配置(IP / 端口 / 密码) |
| Mycat 日志无报错 | grep -i "error" /usr/local/mycat/logs/mycat.log |
无新增 ERROR 日志(启动日志除外) | 有 ERROR 日志:根据日志关键词(如 Connection failed)排查 MySQL 连接 / 配置问题 |
| 高并发简单压测 | 用脚本执行 1000 次 SELECT 1;(模拟并发) |
无连接超时、无数据返回异常 | 报错 Too many connections:调整 Mycat maxCon 配置(schema.xml 中 dataHost 的 maxCon) |
六、验证结果总结表
| 验证维度 | 验证通过标准 | 是否通过 | 问题与整改措施 |
|---|---|---|---|
| 基础连接认证 | 能正常连接 Mycat,无认证 / 权限报错 | ||
| 基础 DDL/DML | 增删改查无报错,数据同步正常 | ||
| 读写分离(若使用) | 写走主库、读走从库,数据同步正常 | ||
| 分库分表(若使用) | 数据按规则分布,聚合查询无缺失 | ||
| 事务支持 | 提交 / 回滚正常,无数据不一致 | ||
| 新语法支持(若需) | 业务核心 SQL 执行无报错 | ||
| 稳定性 | 日志无 ERROR,高并发无异常 |
核心使用建议
- 优先保证「基础连接 + DDL/DML」验证通过,这是业务运行的前提;
- 若使用 MySQL 8.0,优先选择 Mycat 2.0.x(原生兼容),避免 Mycat 1.6.x 手动改驱动 / 认证的额外成本;
- 验证完成后,保存该清单及结果,作为后续版本升级 / 故障排查的参考依据;
- 若涉及生产环境,建议先在测试环境完成全量验证,再灰度上线。