Mycat启动出错

原作者:汪威的博客_优快云博客-php相关,mysql,php设计模式领域博主

原文连接:Mycat使用遇到的错误_汪威的博客-优快云博客

仅用于记录个人使用中碰到的错误

1.错误 
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (44 > -1). You can change this value on the server by setting the max_allowed_packet’ variable。 
原因 
将版本更换为5.1.35后不报错 
官网上 
MycatJDBC连接报 PacketTooBigException异常 
答:检查mysqljdbc驱动的版本,在使用mycat1.3和mycat1.4版本情况下,不要使用jdbc5.1.37和38版本的驱动,会出现如下异常报错:com.mysql.jdbc.PacketTooBigException: Packet for query is too large (60 > -1). You can change this value on the server by setting the max_allowed_packet’ variable。建议使用jdbc5.1.35或者36的版本。 
mycat1.6同样会出现这个问题,换成mysql5.1.40同样可用

2.错误 
Caused by: io.mycat.config.util.ConfigException: java.lang.NullPointerException 
原因 
schema.xml配置文件错误,我的dataNode上下不匹配了。

3.错误 
Startup failed: Timed out waiting for a signal from the JVM. 
JVM did not exit on request, terminated 
解决办法 
在wrapper.conf中添加 
wrapper.startup.timeout=300 //超时时间300秒 
wrapper.ping.timeout=120

通过startup_nowrap.sh启动,报错 
Caused by: io.mycat.config.util.ConfigException: Illegal table conf : table [ …] rule function [ rang-long ] partition size : 3 > table datanode size : 2, please make sure table datanode size = function partition size 
默认的分片是分为3片,而我就设置了2个库。然后我又填了个新库,可以正常启动。 
如果要修改分片规则,则需要修改rule.xml和其中对应的规则文件。

4.错误 
MyCATSequenceProcessor.executeSeq(SesionSQLPair) java.lang.NumberFormatException: null 
原因,主键编号未获取到 
<property name="sequnceHandlerType">0</property>本地文件方式 
sequence_conf.properties文件未配置表名

#default global sequence
GLOBAL.HISIDS=
GLOBAL.MINID=1
GLOBAL.MAXID=20000000
GLOBAL.CURID=0

# self define sequence
COMPANY.HISIDS=
COMPANY.MINID=1
COMPANY.MAXID=2000000
COMPANY.CURID=410
<table name="tbl" primaryKey="ID" autoIncrement="true" dataNode="dn$0-11" rule="sharding-by-substring" />
1
COMPANY应为schema.xml中的表名对应的大写,此处应为TBL

5.错误 
java.sql.SQLSyntaxErrorException: com.alibaba.druid.sql.parser.ParserException: syntax error, expect ‘)’ 
原因 
报SQL语法错误,应该是SQL语句中有内嵌函数。 
我的INSERT语句中VALUES中有时间函数now()

6.错误 
SELECT aaa a, bbb b, ccc c, status status FROM demo WHERE a = ‘11111’ AND b = ‘22222’ AND status=1 err:java.sql.SQLNonTransientException: can’t find table define in schema STATUS schema:demo 
原因 
status字段名和别名一样,导致解析错误,去掉别名或者改成其他别名后正常

7.错误,按月分片 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Can’t find a valid data node for specified node index :TESTDB -> CREATE_TIME -> 2017-07-11 16:38:49 -> Index : 30 
按自然月分片(sharding-by-month),rule.xml中function中设置为

<function name="partbymonth" class="io.mycat.route.function.PartitionByMonth">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sBeginDate">2015-01-01</property>
</function>
起始日期2015-01-01到今天2017-07-11共30个月,需要30分片正常使用,将起始日期改为2017-07-01后正常,此时无法传入2017-07-01之前的数据,而且无法插入(起始日期+分片数量)之后月份的数据。即无法做到循环插入。

可使用以下规则做到按月循环插入,但是只能一个月一个表

<tableRule name="sharding-by-substring"> 
    <rule> 
        <columns>create_time</columns> 
        <algorithm>sharding-by-substring</algorithm> 
    </rule> 
</tableRule>
<function name="sharding-by-substring" 
    class="io.mycat.route.function.PartitionDirectBySubString"> 
    <property name="startIndex">5</property><!-- zero-based -->
    <property name="size">2</property> 
    <property name="partitionCount">12</property> 
    <property name="defaultPartition">0</property> 
</function>
columns 标识将要分片的表字段, 
algorithm 分片函数 此方法为直接根据字符子串(必须是数字)计算分区号(由应用传递参数,显式指定分区号)。 
startIndex,截取开始位置, 
size,截取长度, 
partitionCount,分片数量, 
defaultPartition,默认分片(截取到的不在分片数量内,则会按默认分片处理)

例如create_time=2017-07-04 17:30:03 在此配置中代表根据create_time中从startIndex=5开始,截取size=2位数字即07,07就是获取的分区,如果没有默认分配到defaultPartition

8.提供SQL插入语句时不要带库名,不然可能会全部插入一个库中

9.mycat不提供数据同步,数据同步在MySQL中配置

10.mycat不支持联合主键

11. INFO | jvm 1 | ----/--/-- --:--:-- | Caused by: io.mycat.config.util.ConfigException: schema TEST didn't config tables,so you must set dataNode property!

原因:schema 标签中的dataNode 属性与可嵌套的table 标签有依赖关系 。如果不设置table标签,就必须设置dataNode属性。12. INFO | jvm 1 | ----/--/-- --:--:-- | Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TEST refered by user root is not exist!

原因:server.xml 中<property name="schemas">TEST</property> 中的schema 的值不要用小写。

13. ERROR 3009 (HY000): java.lang.IllegalArgumentException: Invalid DataSource:0

登录数据库后,执行 show tables; 命令执行1分钟(感觉上)。1. schema.xml 中用户名、密码与数据库中保持大小写一致。

 原作者:汪威的博客_优快云博客-php相关,mysql,php设计模式领域博主

原文连接:Mycat使用遇到的错误_汪威的博客-优快云博客

### Mycat 启动报错解决方案 当 Mycat 启动时遇到错误问题,可以通过以下方法分析并解决: #### 日志排查 无论何时遇到报错,首要任务是查看日志文件。Mycat 的主要日志文件包括 `wrapper.log` 和 `mycat.log`。这些日志能够提供详细的错误信息,帮助定位问题所在[^1]。 如果默认的日志级别不足以满足需求,可以在 `conf/log4j.xml` 文件中调整日志级别至 `debug`,从而获取更详尽的信息以便进一步分析。 #### 配置检查 许多启动失败的情况是由配置不当引起的。建议仔细核对以下几个方面: - **字符集设置**:某些情况下,可能会因为字符集不匹配而引发错误,例如 `Unknown charsetIndex:224` 这类问题可能是因为 MySQL 数据库端和 Mycat 端的字符编码存在差异所致[^2]。 - **连接参数**:确认数据库连接字符串、用户名、密码以及权限是否正确无误。 - **其他配置项**:确保 `schema.xml` 和 `server.xml` 中的各项配置合理且一致。 一旦发现潜在的配置问题,可依据具体提示修改相应部分后再尝试重新启动服务[^4]。 #### 社区求助 假如独立处理困难重重,则可以寻求外部支持。向技术交流群组提问时务必附带完整的环境描述与相关联的日志片段,这有助于他人更快捷地诊断状况并给出针对性解答。 以下是针对 Linux 平台上执行常规操作命令列表用于管理 mycat 服务状态: ```bash ./mycat start # 启动 ./mycat stop # 停止 ./mycat console # 前台运行 ./mycat restart # 重启服务 ./mycat pause # 暂停 ./mycat status # 查看启动状态 ``` 而在 Windows 下则分别对应于双击脚本文件或是借助 CMD 执行特定批处理指令完成相似功能[^3]。 总之,在面对复杂情况之时保持冷静,并按照上述流程逐一排除干扰因素直至恢复正常运作为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值