Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]MySql 链接长时间没用使用时候,执行sql会报:PDO::exec(): MySQL server has gone away #91

Open
david20288 opened this issue Aug 2, 2021 · 11 comments

Comments

@david20288
Copy link

Describe Your Environment (描述你的环境)

  • System: centos 7.2
  • PHP version: 7.3
  • Mysql version: 8.0
  • Swoole version: 4.6
  • SMProxy version: 1.3

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

MySql 连接池里面的链接长时间没用使用时候,执行sql会报:PDO::exec(): MySQL server has gone away

More Information (更多信息)

image

...

@david20288 david20288 changed the title MySql 链接长时间没用使用时候,执行sql会报:PDO::exec(): MySQL server has gone away [BUG]MySql 链接长时间没用使用时候,执行sql会报:PDO::exec(): MySQL server has gone away Aug 2, 2021
@david20288
Copy link
Author

是否在使用链接的时候加入 mysql_ping 机制?

@louislivi
Copy link
Owner

这块需要进一步排查,理论上断开连接后会自动清理掉的,再次请求会重新生成连接。

@david20288
Copy link
Author

这块需要进一步排查,理论上断开连接后会自动清理掉的,再次请求会重新生成连接。
image
您说的是这个清理吗?
但是这个只能判断根据swoole 文档:https://wiki.swoole.com/#/client?id=isconnected
isConnected 并不能判断 和mysql server 断开连接了

@louislivi
Copy link
Owner

不是,是在mysql服务端断开时会收到close事件进行处理 src/MysqlProxy.php:297

    /**
     * close.
     *
     * @param Client $cli
     */
    public function onClientClose(\Swoole\Coroutine\Client $cli)
    {
        MySQLPool::destruct($cli, $this->connName);
    }

@david20288
Copy link
Author

不是,是在mysql服务端断开时会收到close事件进行处理 src/MysqlProxy.php:297

    /**
     * close.
     *
     * @param Client $cli
     */
    public function onClientClose(\Swoole\Coroutine\Client $cli)
    {
        MySQLPool::destruct($cli, $this->connName);
    }

项目还再维护吗?

@louislivi
Copy link
Owner

近期在规划进行一次大的版本迭代,针对协议底层进行优化。

@david20288
Copy link
Author

近期在规划进行一次大的版本迭代,针对协议底层进行优化。

这几天我观察日志,基本上八个小时没有请求的话,mysql server 就会断开链接(mysql timeout 配置为八个小时),所以应该有个机制检测链接是否可用

@gordonlhw
Copy link

近期在规划进行一次大的版本迭代,针对协议底层进行优化。

这几天我观察日志,基本上八个小时没有请求的话,mysql server 就会断开链接(mysql timeout 配置为八个小时),所以应该有个机制检测链接是否可用

所以是斷開之後, 有新的query / execute, 不會再重新連接了?

@david20288
Copy link
Author

近期在规划进行一次大的版本迭代,针对协议底层进行优化。

这几天我观察日志,基本上八个小时没有请求的话,mysql server 就会断开链接(mysql timeout 配置为八个小时),所以应该有个机制检测链接是否可用

所以是斷開之後, 有新的query / execute, 不會再重新連接

@david20288 david20288 reopened this Aug 9, 2021
@david20288
Copy link
Author

近期在规划进行一次大的版本迭代,针对协议底层进行优化。

这几天我观察日志,基本上八个小时没有请求的话,mysql server 就会断开链接(mysql timeout 配置为八个小时),所以应该有个机制检测链接是否可用

所以是斷開之後, 有新的query / execute, 不會再重新連接了?
应该用了不可用的链接,然后才重新连接了。

@shuqingzai
Copy link

+1,长时间不使用,我这也会断开连接

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants