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

相关推荐
imc.1117 小时前
linux基础IO
linux·运维·服务器
躺不平的理查德17 小时前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser18 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land032918 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld18 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区18 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
Urbano19 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化
AC赳赳老秦19 小时前
招投标公开数据自动化采集实战:基于 OpenClaw 的定时抓取与业务关键词精准推送
运维·服务器·数据库·自动化·测试用例·deepseek·openclaw
小的博客19 小时前
windows下安装Docker Desptop
运维·docker·容器
酷可达拉斯19 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算