louislivi / SMProxy

Swoole MySQL Proxy 一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。 A MySQL database connection pool based on MySQL protocol and Swoole.
https://smproxy.louislivi.com
MIT License
1.78k stars 258 forks source link

数据库从日本连接到美国,开始正常,过了20分钟左右后连接全部断掉,且不重连,查看状态,连接池为空 #73

Closed gangchzu closed 4 years ago

gangchzu commented 4 years ago

Describe Your Environment (描述你的环境)

How to Reproduce the Problem? (如何重现问题)

  1. 数据库连接是从日本连到美国 2 .启动smproxy后查看status 显示 [root@NottaServiceJP-1-28 notta_service]# /usr/local/smproxy/SMProxy status SMProxy[v1.3.1] - Linux NottaServiceJP-1-28 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 Host: 0.0.0.0, Port: 3366, PHPVerison: 7.2.24 SwooleVersion: 4.3.4, WorkerNum: 4 +----------+----------------+---------------------+--------------------+---------+------+-----------+-----------------------------+----------------+-----------------------+---------------+----------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | SERVER_VERSION | PLUGIN_NAME | SERVER_STATUS | SERVER_KEY | +----------+----------------+---------------------+--------------------+---------+------+-----------+-----------------------------+----------------+-----------------------+---------------+----------------------------+ | 47201913 | normal_langogo | 40.115.232.62:44992 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201914 | normal_langogo | 40.115.232.62:44996 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201915 | normal_langogo | 40.115.232.62:45000 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201916 | normal_langogo | 40.115.232.62:45004 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201917 | normal_langogo | 40.115.232.62:45008 | langogo_user_space | Query | 0 | executing | /SMProxy processlist sql/ | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201918 | normal_langogo | 40.115.232.62:45012 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | writeSΜlangogo_user_space | | 47201923 | normal_langogo | 40.115.232.62:45022 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | readSΜlangogo_user_space | | 47201924 | normal_langogo | 40.115.232.62:45018 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | readSΜlangogo_user_space | | 47201925 | normal_langogo | 40.115.232.62:45026 | langogo_user_space | Sleep | 3 | | | 5.7.23-log | mysql_native_password | 2 | readSΜlangogo_user_space | 正常
  2. 一段时间后 连接池连接全部消失 [root@NottaServiceJP-1-28 notta_service]# /usr/local/smproxy/SMProxy status SMProxy[v1.3.1] - Linux NottaServiceJP-1-28 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 Host: 0.0.0.0, Port: 3366, PHPVerison: 7.2.24 SwooleVersion: 4.3.4, WorkerNum: 4

Expected Behavior (预期行为)

连接池连接不应该消失 ...

Actual Behavior (实际行为)

...

More Information (更多信息)

...

louislivi commented 4 years ago

查看一下日志文件

gangchzu commented 4 years ago

查看一下日志文件 连接池为空的时候查看日志文件,日志文件为空

gangchzu commented 4 years ago

image 几分钟后看status 就是卡在这里 没有一个连接出现

louislivi commented 4 years ago

查看下logs目前下的swoole.log 以及 日期目录下的mysql.logsystem.log 应该是有错误日志的。

gangchzu commented 4 years ago

可能是这个原因 2020-04-22 09:54:28 [warning] MySQL server has gone away (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:244)

查看下logs目前下的swoole.log 以及 日期目录下的mysql.logsystem.log 应该是有错误日志的。 可能是这个原因
2020-04-22 09:54:28 [warning] MySQL server has gone away (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:244)

gangchzu commented 4 years ago

我把数据库换成aws的rds了也是这样,一段时间不操作,连接就丢了

gangchzu commented 4 years ago

2020-04-22 15:09:00 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:00 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:04 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:04 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:10 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:10 [warning] Invalid argument supplied for foreach() (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:186) 2020-04-22 15:09:27 [info] Worker started! 2020-04-22 15:19:15 [info] Worker started! 2020-04-22 15:32:58 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:210) 2020-04-22 15:32:58 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:207) 2020-04-22 15:32:58 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:32:58 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:04 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:210) 2020-04-22 15:33:04 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:207) 2020-04-22 15:33:04 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:04 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:06 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:210) 2020-04-22 15:33:06 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:207) 2020-04-22 15:33:06 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:06 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:14 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:210) 2020-04-22 15:33:14 [warning] Swoole\Coroutine\MySQL::query(): The MySQL connection is not established (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:207) 2020-04-22 15:33:14 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:14 [warning] Swoole\Coroutine\MySQL::recv(): no request (phar:///usr/local/smproxy/SMProxy/src/Command/ServerCommand.php:222) 2020-04-22 15:33:57 [info] Worker started!

gangchzu commented 4 years ago

奇怪的是我测试本机的数据库连接是不会丢的

louislivi commented 4 years ago

从你这条日志信息看来感觉是swoole进程挂掉了,推荐你采用Supervisor或者Docker管理试试

gangchzu commented 4 years ago

swoole 进程没挂 就是连接gone away了 我用ps命令看的

gangchzu commented 4 years ago

我用命令行登录,一段时间不操作也会gone away,应该就是这个原因,我想问下如果连接池的连接不可用了,smproxy会释放,然后重新创建并补充吗,从现象上看没释放并补充进去

louislivi commented 4 years ago

会的,你出现的这个MySQL server has gone away是由SMProxy状态端发送请求到的SMProxy服务端其实还没有到Mysql就已经连接不上了,很有可能是Swoole服务已经未能正常运行了。并非真正意义上Mysql返回的MySQL server has gone away

gangchzu commented 4 years ago

谢谢,请问下我查看进程显示还是存在的,这个用supervisor也没用的吧,还有我在本机测试没问题,连接外网的数据库就出问题了,这个还是不明白

louislivi commented 4 years ago

@gangchzu 你可以尝试使用swoole最新发行版试试,不排除某一个小版本出现这类异常问题

gangchzu commented 4 years ago

好的 多谢您了!