kingshard icon indicating copy to clipboard operation
kingshard copied to clipboard

mysql-cli 连接被夯住了?

Open chutian52 opened this issue 5 years ago • 21 comments

环境: OS: macOS 10.13.6 MySQL:5.7.23 KingShard: V1.6

运行一段时间后再连接kingshard,出现了如下的连接问题 default

chutian52 avatar Oct 15 '18 02:10 chutian52

@flike

chutian52 avatar Oct 15 '18 02:10 chutian52

sys.log输出如下

2018/10/15 12:00:57 - INFO - main.go:[144] - [main] "main" "Ignore broken pipe signal" "" conn_id=0

chutian52 avatar Oct 15 '18 04:10 chutian52

试试最新的master分支,最新版修复了一个连接问题。

flike avatar Oct 15 '18 08:10 flike

@flike 对Go版本有什么要求没?

chutian52 avatar Oct 16 '18 01:10 chutian52

基本上是操作一段时间后,然后停止相关操作。这次复现是昨天晚上7点左右不再操作,然后今天上午8点30左右再操作,就出现了上述问题。当时最后的操作是set autocommit=0后不再有其他操作。 需要确定问题是由于闲置或者是设置参数的问题。

chutian52 avatar Oct 16 '18 02:10 chutian52

有可能是开启了太多的事务,然后连接池中无可用连接。对应这种情况,事务结束后需要关闭,释放连接。 go版本的话,用Go1.9以上就可以。

flike avatar Oct 16 '18 03:10 flike

我昨晚只操作了set autocommit=0,然后强制关掉了连接。我再试试看,目前使用的是master拉下来的最新代码

chutian52 avatar Oct 16 '18 03:10 chutian52

@flike 今天过来看到的情况依然是不可以连接。但是可以通过控制max_conns_limit情况下,模拟出另外一个连接被阻塞的场景

max_conns_limit : 1

现在出现的现象是,如果开启了一个事务,并没有被正确关闭。可能就导致下一个连接出现错误。主要体现在

2018-10-17 09:47:50.272  INFO 2302 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 699 ms
2018-10-17 09:47:50.347  INFO 2302 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2018-10-17 09:47:50.349  INFO 2302 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-10-17 09:47:50.350  INFO 2302 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-10-17 09:47:50.350  INFO 2302 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-10-17 09:47:50.350  INFO 2302 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-10-17 09:47:50.475  INFO 2302 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...

从上述日志中可以看到HikariPool连接池,一直被夯住。mysql-connector-java 在连接的时候会发送一个如下请求

10.1.4.125:53632->10.3.5.183:3306:/* mysql-connector-java-5.1.39 ( Revision: 3289a357af6d09ecc1a10fd3c26e95183e5790ad ) */SELECT  @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_buffer_length AS net_buffer_length, @@net_write_timeout AS net_write_timeout, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS tx_isolation, @@wait_timeout AS wait_timeout

上述指令被路由到了master节点上。 由于开始的时候我开启了一个set autocommit=0;并且执行了一个查询,这样就会导致连接失败。 为什么上述指令会被路由到master节点?

chutian52 avatar Oct 17 '18 01:10 chutian52

上述的现象只有在每次连接的时候才会出现,但也不是每次都会出现。一旦释放了,就不会再出现上述问题了。只有在重启的时候回出现这个问题。

chutian52 avatar Oct 17 '18 02:10 chutian52

差不多等待时间需要5分钟左右

chutian52 avatar Oct 17 '18 03:10 chutian52

@flike 连接被夯住的现象复现了。 基本操作如下 步骤一、重启kingshard,执行如下命令

$mysql -uroot -proot -hlocalhost -P9696

mysql> show databases();
mysql> use starter_shopping_cart;
mysql> set autocommit=0;
mysql> select * from shopping_cart;

强制退出 二、重启slave节点 三、重新使用mysql -uroot -proot -hlocalhost -P9696命令后就出现了连接被夯住的现象。

chutian52 avatar Oct 17 '18 07:10 chutian52

我查了下资料,SIGPIPE是由于服务端断开了连接,但是客户端依然使用断开的连接发送数据,具体连接参考https://www.cnblogs.com/lit10050528/p/5116566.html 我个人推测,是否是由于连接池里面的连接本身没有释放的问题? 我在sys.log里面看到了如下的日志

2018/10/17 15:00:15 - ERROR - node.go:[141] - [Node] "checkSlave" "Ping" "db.Addr=localhost:3306|error=connection was bad" conn_id=0

另外对于隔夜就出现无法连接的情况,我发现mysql-server本身是有一个wait_timeout参数的。具体如下

mysql> select @@wait_timeout;
+----------------+
| @@wait_timeout |
+----------------+
|          28800 |
+----------------+

时间换算下来是8小时。差不多也就是一夜没操作的时间

chutian52 avatar Oct 17 '18 07:10 chutian52

go 版本1.9.4会出现上述问题。对于1.11.1版本缺不会。

chutian52 avatar Oct 17 '18 08:10 chutian52

事务只会在master实例上执行。最新的master分支修复了失效连接的问题,你是更新到最新代码吗?

flike avatar Oct 17 '18 12:10 flike

@flike 嗯。是最新的代码。只有go版本不一样。1.11.1版本的go下,确实不会出现这个问题。在1.9.4下面会出现这个问题。目前用1.11相对比较稳定。 1.9.4下发起连接,main.go都会接收到一个sigpipe事件。 再看看1.11.1下是否会出现这个问题。现在先用1.11.1版本

chutian52 avatar Oct 18 '18 00:10 chutian52

两台机器上的 git log 分别如下 97机器上的为

git log
commit 93f4cba2de418167ea39c8df500983f5ae8583c6
Merge: f14cfce 6226155
Author: Fei Chen <[email protected]>
Date:   Mon Oct 15 16:55:32 2018 +0800

    Merge pull request #468 from zs1379/master

    <E4><BF><AE><E5><A4><8D>tryReuse<E6><97><B6><E5><8F><AF><E8><83><BD><E5><87><BA><E7><8E><B0><E7><9A><84><E6><97><A0><E6><B3><95><E8><BF><9E><E6>

commit 6226155dcbcf02e89e07a9b2972bdedee6dd6274
Author: zhangsong <[email protected]>
Date:   Fri Oct 12 11:52:00 2018 +0800

    <E4><BF><AE><E5><A4><8D><E8><BF><9E><E6><8E><A5><E5><A4><8D><E7><94><A8><E7><9A><84>bug

commit 6f43a65e5ef48a7f08dd4993628ffd791d27208a
Author: zhangsong <[email protected]>
Date:   Thu Oct 11 20:01:18 2018 +0800

77机器上的为

$ git log
commit 93f4cba2de418167ea39c8df500983f5ae8583c6
Merge: f14cfce 6226155
Author: Fei Chen <[email protected]>
Date:   Mon Oct 15 16:55:32 2018 +0800

    Merge pull request #468 from zs1379/master

    <E4><BF><AE><E5><A4><8D>tryReuse<E6><97><B6><E5><8F><AF><E8><83><BD>

commit 6226155dcbcf02e89e07a9b2972bdedee6dd6274
Author: zhangsong <[email protected]>
Date:   Fri Oct 12 11:52:00 2018 +0800

    <E4><BF><AE><E5><A4><8D><E8><BF><9E><E6><8E><A5><E5><A4><8D><E7><94>

commit 6f43a65e5ef48a7f08dd4993628ffd791d27208a
Author: zhangsong <[email protected]>
Date:   Thu Oct 11 20:01:18 2018 +0800

chutian52 avatar Oct 18 '18 00:10 chutian52

我也遇到了同样的问题。

amilytan avatar Oct 23 '18 02:10 amilytan

@amilytan 已经解决了吗?尝试用最新版的go和master分支中的代码

chutian52 avatar Oct 25 '18 06:10 chutian52

@chutian52 感谢关心。已尝试最新版的go和master分支中的代码,连接问题暂时得以解决了。 但是出现了新的问题 https://github.com/flike/kingshard/issues/475

amilytan avatar Oct 25 '18 07:10 amilytan

不好意思,借贵地用下。 @chutian52 @amilytan 请问下,两位都是在生产环境中使用的吗?数据量有多大? @flike 请问下,生产环境有友商在用吗? 谢谢

Tang-RoseChild avatar Feb 25 '19 11:02 Tang-RoseChild

我遇到同样的问题::Error 1105: connection was bad

franklwel1990 avatar Oct 30 '20 07:10 franklwel1990