运维工程师技术之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,再逐步排查其他问题即可解决。

相关推荐
酉鬼女又兒2 小时前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面2 小时前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk81632 小时前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
袁煦丞 cpolar内网穿透实验室2 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
AZ996ZA2 小时前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php
神梦流3 小时前
GE 引擎的非标准数据流处理:稀疏张量与自定义算子在图优化中的语义保持
linux·运维·服务器
兜兜转转了多少年3 小时前
从脚本到系统:2026 年 AI 代理驱动的 Shell 自动化
运维·人工智能·自动化
Lsir10110_4 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
Doro再努力5 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
全栈工程师修炼指南5 小时前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp