linux系统中启动MyCat问题总结

本文讲述了作者在学习MySQL分库分表时遇到MyCat启动问题,通过排查日志、利用GPT指导,解决了JDK版本不匹配和schema配置冲突的问题,强调了配置理解和问题解决的重要性。
摘要由CSDN通过智能技术生成

最近在深入学习mysql的底层原理和应用,今天在学习分库分表操作的时候,由于一些配置问题,导致无法正常启动MyCat。最终通过GPT和其他博客将问题解决了,以下是一篇关于MyCat启动异常的解决方案。

1.思路:

配置问题其实一直都是比较头痛的,尤其当时是对于刚刚起步的新手,按着视频或者教程一步一步走,最后却没有办法正常运行,明明配置的一摸一样,却不知道问题出现在哪里?这时候,我们不妨跳出视频或者教程的节奏,通过各种各样的搜索来正确解决问题。由于配置问题多种多样,很难直接找到和自己的错误相同的。这里提供一般性的解决思路:查看日志文件,拿着日志文件的中的error信息去提问GPT,让GPT提供思路。在确定好大致问题之后,再去网络上搜索文档去解决问题或者让GPT提供解决方案。

2. 查找日志文件

我们可以通过以下linux命令来查找mycat的安装目录

1.使用 whereis 命令

        格式:whereis 文件名

这个命令会返回指定文件的可执行文件、源代码文件以及帮助文档所在的目录。

2. 使用find命令 

        格式:find / -name "文件名"

这个命令会在整个系统中搜索文件名并返回匹配的路径。

 我们通过以上命令快速定位本机上的mycat的安装目录,logs文件夹中的wrapper.log里面有我们想要看的mycat启动的日志信息,可按照以下命令进入:

 3. 解读错误信息

Error1:

STATUS | wrapper  | 2024/03/26 10:34:31 | Launching a JVM...
ERROR  | wrapper  | 2024/03/26 10:34:31 | JVM exited while loading the application.
INFO   | jvm 5    | 2024/03/26 10:34:31 | Unrecognized VM option 'MaxPermSize=64M'
INFO   | jvm 5    | 2024/03/26 10:34:31 | Error: Could not create the Java Virtual Machine.
INFO   | jvm 5    | 2024/03/26 10:34:31 | Error: A fatal exception has occurred. Program will exit.
FATAL  | wrapper  | 2024/03/26 10:34:31 | There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up.
FATAL  | wrapper  | 2024/03/26 10:34:31 |   There may be a configuration problem: please check the logs.
STATUS | wrapper  | 2024/03/26 10:34:31 | <-- Wrapper Stopped
这里我们可以看出,有一个VM option的参数没有办法去识别,导致jvm启动失败,错误看的一头雾水,完全没有思路,在网上搜索也没有解决方法,报错信息不一致。于是就询问GPT,GPT的解答如下:

 GPT给出的思路是JDK版本不匹配,之后在官网里面核实信息,看看是否真的是因为版本号的问题,找到了这样的一句话:only mycat2 is supported on java8

 查看本地JDK版本号,发现是JDK17的,于是下载JDK8,更改系统变量,解决了这一个版本错误的信息;

Error2:

解决完版本问题,又遇到一个bug,一大串的初始化异常,同时也印证了我们上一个问题解决了,JVM现在能够正常启动了。

问题看的不是很懂,于是再次询问GPT,对话如下:

这是我的schema.xml内容如下:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
		<!-- auto sharding by id (long) -->
		<table name="TB_ORDER" dataNode="dn1,dn2" rule="auto-sharding-long" />
	</schema>
	
	<dataNode name="dn1" dataHost="dhost1" database="db01" />
	<dataNode name="dn2" dataHost="dhost2" database="db01" />

	<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="linux01" url="jdbc:mysql://192.168.49.111:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="123456">

		</writeHost>
	</dataHost>
	
	<dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="linux03" url="jdbc:mysql://192.168.49.113:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="123456">
		</writeHost>
	</dataHost>
</mycat:schema>

这时候想起来,默认配置文件里面的分表操作是3个数据库,而我直接删除了一个,配置了两个数据的信息。让GPT给出的解决方案是:

按照GPT给出的方案去解决问题,仍然报错,于是就想着能不能把规则函数的rang-long的分区大小进行更改呢?

在rule.xml配置文件中向下查找算法的最终实现,发现算法实现时,需要读取一个名为autopartition-long.txt的配置文件信息。

找到该文件,打开,发现问题所在

文件中配置了3个数据库的分区,而我只配置了两个数据库,导致配置文件之间发生冲突。

 解决方法:直接注掉最后一行即可。

4.总结: 

这篇博客解决了两个问题:

  1. mycat需要JDK8作为支持,不能够使用JDK17
  2. 我们在配置schema.xml文件的时候,一定要注意自己所使用的算法是如何实现的,可以在rule.xml中找到算法实现的配置文件进行更改。

这篇博客到这里就结束了,学习中遇到问题很简单,想办法去解决就可以了。

一起加油吧!!!

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值