Mycat Ubuntu无法正常启动 报错Encountered an error running main log4j.spi.ExtendedLogger.logIfEnabled 找不到方法

问题

今天跟着某马学习分库分表时用到了MyCat,但是使用他们提供的Mycat 1.6.7.3压缩包解压完成后,mycat启动时,mycat的wrapper.log一直报错,查询Mycat也没有运行起来,其中Ubuntu 20系统报错如下:

NFO | jvm 1 | 2024/04/28 16:25:44 | WrapperSimpleApp: Encountered an error running main: java.lang.NoSuchMethodError: org.apache.logging.log4j.spi.ExtendedLogger.logIfEnabled(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;)V

INFO | jvm 1 | 2024/04/28 16:25:44 | java.lang.NoSuchMethodError: org.apache.logging.log4j.spi.ExtendedLogger.logIfEnabled(Ljava/lang/String;Lorg/apache/logging/log4j/Level;Lorg/apache/logging/log4j/Marker;Ljava/lang/String;Ljava/lang/Object;)V

问题分析

1.因为mycat分库分表涉及到server.xml和schema.xml的配置修改,因为很久没有写java,无法确定上面报错一定就是软件问题,所以多次确认好两个配置文件无误后进行下一步。

2.AI提示对于这个回答很笼统,分别让确认依赖版本,查看pom.xml,或者时编译环境等,但是我可能除了系统用的是Ubuntu外,其他基本无差别,jdk和mycat都使用的是教程相同版本。

3.使用Google搜索依然无解,只能自己慢慢尝试。为了排查系统因素,使用虚拟机开启安装好的Centos7系统,进入mycat目录,启动后,查看mycat目录下的logs文件夹中的wrapper.log报了新的错:

INFO | jvm 1 | 2024/04/28 16:45:32 | WrapperSimpleApp: Unable to locate the class io.mycat.MycatStartup: java.lang.NoSuchMethodError: org.apache.logging.log4j.status.StatusLogger.debug(Ljava/lang/String;Ljava/lang/Object;)V

4.查询网上资料说可能jdk版本低了,可能是我之前练习linux的时候遗留的jdk版本低了,重新上传视频同版本jdk到Centos虚拟机下并配置profile环境变量,配置好后使用source /etc/profile指令重载环境变量并启动mycat,报错依旧,看来和系统关系不大,继续切换回Ubuntu系统进行修复。

5.根据网上资料访问Mycat官网,结果Mycat 1已经访问不到资源了,页面已经提示Nginx 404了

6.因为log4j依赖库实在不知道怎么修改,网上该报错也较少,可能是Mycat 1版本已经很久没人维护的原因。尝试更换网上找到的Mycat版本为1.6到Ubuntu,结果发现项目目录结构还相对较新的1.6.7.3版本不一样,启动后报了新错,直接放弃。

7.CSDN中不少该软件不同的版本要付费,也只好放弃

解决办法

搞了一整天,最后还是版本问题,Google到藏在GitHub下原官方不起眼的Mycat 1.6.7.5的包,最终成功解决,先上网盘连接给大伙

点击获取mycat 1.6.7.5版本包

重新安装MyCat前,先使用cp指令备份自己已经确认修改好的mycat的conf目录下的server.xml和schema.xml文件,避免重复无用功。
之后一定要删除原来的mycat文件夹,然后解压缩并且在新的mycat目录下创建一个名为logs的文件夹!

因为我第一次成功是在Ubuntu下,重新安装到CentOS系统测试时,没有删除原来的mycat文件夹导致CentOS报错依然和此前该系统的报错一致。

步骤:

1.通过xftp或者其他软件,将mycat 1.6.7.5.tar.gz包和mysql-connector-java-8.0.22.jar上传到自己要使用mycat的主服务器上,我这里上传到系统根目录下的/opt路径下

2.切换到自己的linux系统,解压mycat压缩包到/usr/local文件夹下

cd /opt
tar -zxvf Mycat-server-1.6.7.5-release-20200422133810-linux.tar.gz -C /usr/local

3.配置好可以通过该指令看到jdk版本回显信息

java -version 

4.在mycat目录下,先删除lib目录下的过时5.x版本的mysql-connection的jar包,之后将jar包拷贝到lib目录下,并修改该包的权限为可读写执行

cd /usr/local/mycat/lib
rm -rf mysql-connector-java-5.1.35.jar
cp /opt/mysql-connector-java-8.0.22.jar /usr/local/mycat/lib
chmod 777 /usr/local/mycat/lib/mysql-connector-java-8.0.22.jar

5.切换到mycat的conf目录下,删除默认的server.xml和schema.xml,并拷贝备份修改好的这两个文件到conf目录下,同上一步一样使用chmod指令为两个配置文件添加可读可写可执行权限。

cd /usr/local/mycat/conf
rm server.xml
rm schema.xml
cp 你的备份server.xml或shcema.xml /usr/local/mycat/conf

6.重点,重点,重点,这个Mycat包缺少了一个logs文件夹,需要创建一个logs文件夹,用于存放wrapper.log文件

cd /usr/local/mycat
mkdir logs

如果不创建缺少文件夹,直接启动mycat,就有可能会报下面这个错误:

Could not write pid:No such file or directory

这个问题解决方法参考自:启动MyCat报错:Could not write pid:No such file or directory 解决办法

7.切换到mycat目录下,执行如下指令,并查看log信息可以看到success已经成功写到了日志里

/usr/local/mycat/bin/mycat start
less /usr/local/mycat/logs/wrapper.log 

成功启动可以看到如下信息
在这里插入图片描述
并且使用端口指令也可以查看到8066端口已经在运行了

netstat -lnap | grep 8066

在这里插入图片描述

总结

这个问题虽然解决后感觉不难,可是当时找了一天,AI和Google和百度都没有找到这个和Mycat相关联的报错信息,确实比较崩溃,而且官网也不再维护这个版本了,换不同版本的包都不太好找,中途一度怀疑自我,还好这次运气比较好,如果有帮到你的话,希望可以点个赞,谢谢!

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值