【问题标题】:Error Code: 2013. Lost connection to MySQL server during query 30.002 sec错误代码:2013。在查询 30.002 秒期间失去与 MySQL 服务器的连接
【发布时间】:2019-05-29 09:06:33
【问题描述】:

有很多问题与我的主题相同,但我的内容和问题似乎不同。在我的工作台中,我运行代码

`select(msgid) from `table`.log where 
 id = 'example'  and  status = 'active'  and month(created_at) = 12 
 and year(created_at) = 2018 limit 0,10;`

上面的代码工作正常,但是当我运行代码b时

`select(msgid), count(msgid) from `table`.log where 
     id = 'example'  and  status = 'active'  and month(created_at) = 12 
     and year(created_at) = 2018 limit 0,10;`

我得到了错误

> 错误代码:2013。在查询 30.002 秒期间失去与 MySQL 服务器的连接

为什么我的工作台会发生这种情况?

PS:workbench 和 mysql 新手

【问题讨论】:

  • 为什么你的查询这么慢?您可能希望专注于提高速度。

标签: php mysql mysql-workbench


【解决方案1】:

这是 MySQL Workbench 8.0.13 的首选项屏幕截图。我已经放置了箭头,指示您应该在哪里选择“SQL 编辑器”,然后在哪里找到“DBMS 连接读取超时间隔”字段。

我同意@SalmanA 的评论,你应该优化你的查询,这样它就不会那么慢了。

特别是,您应该使用索引来帮助查询缩小要报告的行。但是当你使用month(created_at)year(created_at) 之类的函数时,你不能这样做。假设您在created_at 上有一个索引,您需要将该列单独放在比较运算符的左侧:

... AND created_at >= '2018-12-01' AND created_at < '2019-01-01'

这个查询的最佳索引是复合索引:

ALTER TABLE log ADD INDEX (id, status, created_at, msg_id);

【讨论】:

    【解决方案2】:

    您可以更改超时时间:

    编辑 → 首选项 → SQL 编辑器 → DBMS 连接读取超时(以秒为单位):600

    将其更改为比当前更大的值。

    **更新 您也可以通过以下方式设置读取超时:

    SET @@local.net_read_timeout=360;
    

    【讨论】:

    • 我的没有 DBMS 连接读取超时(以秒为单位)。我只有 query editorobject editor,'sql 执行'
    • 你有什么版本的工作台?检查它并在这里评论,你可以执行查询来检查我更新的答案
    【解决方案3】:

    您应该尝试增加 DBMS 连接读取超时。

    转到工作台编辑 → 首选项 → SQL 编辑器 → DBMS 连接读取超时:将其增加到 6000

    【讨论】:

    • 我的没有 DBMS 连接读取超时(以秒为单位)。我只有query editorobject editor,'sql 执行'
    • 你能上传一张你得到的菜单的截图吗?还有'sql execution'里面的内容
    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多