Mycat2
Mycat2 copied to clipboard
mycat2连接后端mysql出错,连接重置
我用docker创建了两个mysql库准备测试一下mycat2但是总是连接出错: docker创建mysql命令如下:
docker run --name mycat-mysql2 -p13307:3306 -e MYSQL_ROOT_PASSWORD=changeme -d mysql:5.7
docker run --name mycat-mysql -p13306:3306 -e MYSQL_ROOT_PASSWORD=changeme -d mysql:5.7
上面创建数据库后,用mysql客户端和mycat1.6连接都是没问题的.
mycat.yml配置如下,就是按照mycatCore/main/resource/mycat.yml改了一下数据源的ip,密码等,本地ip试过127.0.0.1,0.0.0.0都会报错.
metadata:
schemas: [{
schemaName: 'mycat1' , targetName: 'defaultDs',
},
{
schemaName: 'mycat2' , targetName: 'defaultDs2',
}]
interceptors:
[{
user: {ip: '.', password: '123456', username: root},
transactionType: proxy
}]
datasource:
datasources: [{name: defaultDs, ip: 0.0.0.0,port: 13306,user: root,password: changeme,maxCon: 10000,minCon: 0,
maxRetryCount: 3, #连接重试次数
maxConnectTimeout: 10000, #连接超时时间 毫秒
dbType: mysql, #
url: 'jdbc:mysql://127.0.0.1:13306/mycat1?useUnicode=true&characterEncoding=utf8mb4',
weight: 1, #负载均衡权重
initSqls: ['set names utf8mb4;']
, #建立连接后执行的sql,在此可以写上use xxx初始化默认database
instanceType: READ_WRITE, #READ,WRITE,READ_WRITE ,集群信息中是主节点,则默认为读写,副本则为读,此属性可以强制指定可写,
initSqlsGetConnection: true
},
{ name: defaultDs2, ip: 0.0.0.0,port: 13307,user: root,password: changeme,maxCon: 10000,minCon: 0,
maxRetryCount: 3,maxConnectTimeout: 10000,dbType: mysql,
url: 'jdbc:mysql://127.0.0.1:13307/mycat2?useUnicode=true&characterEncoding=utf8mb4',
weight: 1,
initSqls: ['set names utf8mb4;'],
instanceType: READ_WRITE, #READ,WRITE,READ_WRITE
initSqlsGetConnection: true
}
]
datasourceProviderClass: io.mycat.datasource.jdbc.datasourceprovider.AtomikosDatasourceProvider
timer: {initialDelay: 10, period: 5, timeUnit: SECONDS}
cluster: #集群,数据源选择器,既可以mycat自行检查数据源可用也可以通过mycat提供的外部接口设置设置数据源可用信息影响如何使用数据源
close: true #关闭集群心跳,此时集群认为所有数据源都是可用的,可以通过mycat提供的外部接口设置数据源可用信息达到相同效果
clusters: [
{name: repli ,
replicaType: MASTER_SLAVE , # SINGLE_NODE:单一节点 ,MASTER_SLAVE:普通主从 GARELA_CLUSTER:garela cluster
switchType: SWITCH , #NOT_SWITCH:不进行主从切换,SWITCH:进行主从切换
readBalanceType: BALANCE_ALL , #对于查询请求的负载均衡类型
readBalanceName: BalanceRoundRobin , #对于查询请求的负载均衡类型
writeBalanceName: BalanceRoundRobin , #对于修改请求的负载均衡类型
masters:[defaultDs , defaultDs2], #主节点列表,普通主从,当主失去连接后,依次选择列表中存活的作为主节点
replicas:[ defaultDs2],#从节点列表
maxCon:, #集群最占用大连接限制
heartbeat:{maxRetry: 3, #心跳重试次数
minSwitchTimeInterval: 120000 , #最小主从切换间隔
heartbeatTimeout: 100000 , #心跳超时值,毫秒
slaveThreshold: 0 , # mysql binlog延迟值
requestType: 'mysql' #进行心跳的方式,mysql或者jdbc两种
}}
]
timer: {initialDelay: 0, period: 1, timeUnit: SECONDS} #心跳定时器 initialDelay一般为0,mycat会在开启集群心跳,一个initialDelay+1秒之后开启服务器端口
#负载均衡类型 BALANCE_ALL:所有数据源参与负载均衡 BALANCE_ALL_READ:所以非master数据源参与负载均衡 BALANCE_NONE:只有master(一个)参与负载
plug:
sequence:
sequences: [
{name: 'db1_travelrecord', clazz: io.mycat.plug.sequence.SequenceMySQLGenerator ,args: "sql : SELECT db1.mycat_seq_nextval('GLOBAL') , targetName:defaultDs"},
{name: 'db1_address', clazz: io.mycat.plug.sequence.SequenceSnowflakeGenerator ,args: 'workerId:1'},
]
server:
ip: 0.0.0.0
port: 8066
reactorNumber: 1
properties:
key: value
#lib start
#lib end
mycat2报错日志:
[main] INFO io.mycat.MycatWorkerProcessor - Mycat WorkerProcessor init by:ServerConfig.ThreadPoolExecutorConfig(corePoolSize=8, maxPoolSize=1024, keepAliveTime=1, taskTimeout=1, timeUnit=MINUTES, maxPendingLimit=65535)
[main] INFO io.mycat.MycatWorkerProcessor - Mycat TIME WorkerProcessor init by:ServerConfig.ThreadPoolExecutorConfig(corePoolSize=0, maxPoolSize=2, keepAliveTime=1, taskTimeout=1, timeUnit=MINUTES, maxPendingLimit=65535)
[main] INFO io.mycat.MycatCore - mycat starts successful
[Thread-1] INFO io.mycat.proxy.session.MycatSessionManager - MycatSessionManager is checking
[Thread-2] INFO io.mycat.proxy.reactor.NIOAcceptor - New Client connected:java.nio.channels.SocketChannel[connected local=/127.0.0.1:8066 remote=/127.0.0.1:37518]
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.proxy.session.MycatSession - set mycat session id:1 isolation:READ_UNCOMMITTED
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - /* mysql-connector-java-5.1.35 ( Revision: 5fb9c5849535c13917c2cf9baaece6ef9693ef27 ) */SHOW VARIABLES WHERE Variable_name ='language' OR Variable_name = 'net_write_timeout' OR Variable_name = 'interactive_timeout' OR Variable_name = 'wait_timeout' OR Variable_name = 'character_set_client' OR Variable_name = 'character_set_connection' OR Variable_name = 'character_set' OR Variable_name = 'character_set_server' OR Variable_name = 'tx_isolation' OR Variable_name = 'transaction_isolation' OR Variable_name = 'character_set_results' OR Variable_name = 'timezone' OR Variable_name = 'time_zone' OR Variable_name = 'system_time_zone' OR Variable_name = 'lower_case_table_names' OR Variable_name = 'max_allowed_packet' OR Variable_name = 'net_buffer_length' OR Variable_name = 'sql_mode' OR Variable_name = 'query_cache_type' OR Variable_name = 'query_cache_size' OR Variable_name = 'license' OR Variable_name = 'init_connect'
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - /* mysql-connector-java-5.1.35 ( Revision: 5fb9c5849535c13917c2cf9baaece6ef9693ef27 ) */SELECT @@session.auto_increment_increment
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - SET NAMES latin1
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - SET autocommit=1
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - SET sql_mode='STRICT_TRANS_TABLES'
[Thread-1] INFO io.mycat.proxy.session.MySQLProxyServerSession - ------------has response--------------:1
[Thread-1] INFO io.mycat.commands.MycatdbCommand - select * from mycat1.teacher
[Thread-1] INFO io.mycat.proxy.handler.backend.BackendConCreateHandler - inetSocketAddress:/0.0.0.0:13306
[Thread-1] INFO io.mycat.proxy.handler.backend.BackendConCreateHandler - backend mysql authPluginName:mysql_native_password
[Thread-1] INFO io.mycat.proxy.handler.backend.BackendConCreateHandler - mycat set authPluginName:mysql_native_password
[Thread-1] INFO io.mycat.proxy.handler.backend.BackendConCreateHandler - authPluginName:mysql_native_password
[Thread-1] ERROR io.mycat.proxy.handler.MycatHandler - {}
java.io.IOException: 连接被对方重设
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at io.mycat.proxy.packet.FrontMySQLPacketResolver.readFromChannel(FrontMySQLPacketResolver.java:54)
at io.mycat.proxy.handler.MycatHandler.onSocketRead(MycatHandler.java:52)
at io.mycat.proxy.handler.MycatHandler.onSocketRead(MycatHandler.java:33)
at io.mycat.proxy.reactor.ProxyReactorThread.processReadKey(ProxyReactorThread.java:148)
at io.mycat.proxy.reactor.ProxyReactorThread.run(ProxyReactorThread.java:205)
[Thread-1] ERROR io.mycat.proxy.handler.MySQLPacketExchanger - {}
java.io.IOException: 连接被对方重设
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at io.mycat.proxy.packet.FrontMySQLPacketResolver.readFromChannel(FrontMySQLPacketResolver.java:54)
at io.mycat.proxy.handler.MycatHandler.onSocketRead(MycatHandler.java:52)
at io.mycat.proxy.handler.MycatHandler.onSocketRead(MycatHandler.java:33)
at io.mycat.proxy.reactor.ProxyReactorThread.processReadKey(ProxyReactorThread.java:148)
at io.mycat.proxy.reactor.ProxyReactorThread.run(ProxyReactorThread.java:205)
[Thread-1] INFO io.mycat.proxy.session.MycatSessionManager - MycatSessionManager is checking
估计是jdbc客户端检查到某个mysql变量有问题关闭的,而不是后端mysql连接出错
你可以把后端连接改成jdbc再试试
你可以把后端连接改成jdbc再试试
是加上type:JDBC就行了吗,我之前试了一下,还是同样的报错.
在jdbc的代码里面打断点才能看到断开的原因