运维工程师技术之MyCat中间件免费技术教程

从现象来看,更换为 MyCat 地址(10.0.0.58:3306/BLOGDB)后出现 HTTP 404 Not Found ,核心原因并非 MyCat 数据库连接失败(数据库失败通常报 500 错误),而是Web 应用的请求路径/资源映射异常,或 MyCat 配置导致应用层面的访问逻辑失效。以下是分步排查和解决思路:

一、先明确核心逻辑(关键区分)

配置类型 正常访问(直连MySQL) 异常访问(MyCat) 核心差异
数据库地址 10.0.0.51:3306/blog 10.0.0.58:3306/BLOGDB 地址+逻辑库名
错误类型 无(正常) 404 Not Found 不是数据库连接错误,是Web资源未找到

二、分步排查 & 解决

步骤 1:验证 MyCat 本身是否能正常访问(排除数据库层问题)

先通过 MySQL 客户端直接连接 MyCat,确认 BLOGDB 逻辑库可访问,避免「误以为 MyCat 问题,实际是应用问题」:

bash 复制代码
# 连接 MyCat(默认端口 8066!不是 3306!)
mysql -uzrblog -p123 -h10.0.0.58 -P8066

# 执行以下命令验证:
show databases; # 需显示 BLOGDB
use BLOGDB;
show tables;    # 需显示 blog 库的所有表
select count(*) from 某张表; # 能查到数据则 MyCat 正常

⚠️ 关键错误:你在 db.properties 中写的是 3306 端口,但 MyCat 的默认服务端口是 80663306 是 MySQL 的端口!这是最可能的核心问题

步骤 2:修正 db.properties 中的 MyCat 端口(重中之重)

jdbcUrl 中的端口从 3306 改为 MyCat 的默认端口 8066,同时确认逻辑库名 BLOGDB 与 MyCat 配置一致:

properties 复制代码
# 错误配置(用了MySQL端口3306)
# jdbcUrl=jdbc\:mysql\://10.0.0.58\:3306/BLOGDB?xxx
# 正确配置(改为MyCat端口8066)
jdbcUrl=jdbc\:mysql\://10.0.0.58\:8066/BLOGDB?characterEncoding\=UTF-8&allowPublicKeyRetrieval\=true&useSSL\=false&serverTimezone\=GMT

✅ 补充:MyCat 的端口规则

  • 8066:客户端连接端口(应用/JDBC 需用这个);
  • 9066:管理端口(仅用于 MyCat 运维命令);
  • 3306:是后端 MySQL 的端口,不是 MyCat 的!
步骤 3:排查 Web 应用 404 的其他原因(若改端口后仍报错)

若修正端口后还是 404,说明是应用层面的资源映射问题,按以下顺序排查:

原因 1:应用启动时数据库连接失败,导致核心资源未加载

404 可能是「应用启动时连不上数据库,导致 Controller/页面未初始化」,需查看 Tomcat 日志:

bash 复制代码
# 查看 Tomcat 日志(定位数据库连接错误)
tail -f /usr/local/tomcat/logs/catalina.out

# 重点找关键词:
# Communications link failure(连接失败)
# Access denied for user 'zrblog'(权限错误)
# Unknown database 'BLOGDB'(逻辑库名错误)
  • 若报「Access denied」:检查 MyCat 的 server.xmlzrblog 账号是否授权 BLOGDB
  • 若报「Unknown database」:检查 MyCat 的 schema.xmlBLOGDB 拼写是否完全一致;
  • 若报「Communications link failure」:检查 MyCat 服务器的 8066 端口是否开放(telnet 10.0.0.58 8066)。
原因 2:应用上下文路径/访问路径变化
  • 直连 MySQL 时应用的访问路径是 http://ip:8080/blog,但改 MyCat 后是否误改了 Tomcat 部署路径?

  • 检查 webapps 目录:确保 blog 文件夹仍在,且 ROOT 目录未被篡改;

  • 重启 Tomcat 确保配置生效:

    bash 复制代码
    /usr/local/tomcat/bin/shutdown.sh
    # 等待5秒
    /usr/local/tomcat/bin/startup.sh
原因 3:MyCat 逻辑库名与应用预期的库名不匹配

应用代码中可能硬编码了物理库名 blog,但 MyCat 逻辑库名是 BLOGDB,导致代码中「按库名找表」失败,触发 404:

  • 检查应用代码中是否有 use blog;FROM blog.表名 这类硬编码;

  • 若有,改为 MyCat 的逻辑库名 BLOGDB,或在 MyCat 的 schema.xml 中把逻辑库名改为 blog(更简单):

    xml 复制代码
    <!-- schema.xml 中修改逻辑库名,匹配应用预期 -->
    <schema name="blog" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>

    同时同步修改 db.properties 中的库名:

    properties 复制代码
    jdbcUrl=jdbc\:mysql\://10.0.0.58\:8066/blog?xxx

三、最终验证流程

  1. 修正 db.properties 中的 MyCat 端口为 8066;
  2. 重启 Tomcat;
  3. 访问 Web 网站,若仍 404,查看 Tomcat 日志;
  4. 若日志报数据库连接错误,回到步骤 1 重新验证 MyCat 连接;
  5. 若日志无错误但仍 404,检查应用访问路径/代码中的库名硬编码。

核心总结

你当前的核心错误是「把 MyCat 的端口写成了 MySQL 的 3306」,这会导致应用连不上 MyCat,启动时数据库初始化失败,最终表现为 Web 资源未加载(404)。先修正端口为 8066,再逐步排查其他问题即可解决。

相关推荐
wanhengidc1 小时前
云手机 巨 椰 三角洲行动
运维·服务器·科技·游戏·智能手机
weixin_307779131 小时前
Jenkins Gson API插件:统一JSON处理的基础库
java·运维·开发语言·架构·jenkins
写bug的小屁孩1 小时前
5.Kafka-HW重要特性与场景分析
分布式·中间件·kafka
小嘟嘟131 小时前
第2章 Shell 变量与参数传递:3 种定义方式 + 避坑指南
linux·运维·shell
云和恩墨1 小时前
打造数据库安全堡垒:统一自动化监控平台在DBA运维中的价值解析
运维·数据库·安全·自动化·dba
AiTEN_Robotics1 小时前
智能化时代,汽车制造机器人的发展趋势是什么?
运维·机器人·自动化
北京阿法龙科技有限公司1 小时前
AR眼镜仓储物流分拣技术应用与落地方案
运维·人工智能·ar·xr
悦数图数据库1 小时前
赋能金融风控:悦数图数据库助力互联网金融平台应对全球扩张挑战
大数据·运维·数据库
Eric.Lee20211 小时前
ubuntu系统在bashrc文件中对conda进行启用设置
linux·运维·python·ubuntu·conda