错误代码:2013。查询期间与MySQL服务器的连接断开


250

我收到错误代码:2013。当我尝试使用MySQL Workbench向表中添加索引时,在查询错误期间与MySQL服务器的连接断开。我还注意到,只要我运行长时间查询,它就会出现。

是否有增加超时值的方法?

Answers:


471

新版本的MySQL WorkBench具有更改特定超时的选项。

对我来说,它位于编辑→首选项→SQL编辑器→DBMS连接读取超时(以秒为单位):600

将值更改为6000。

也没有检查限制行,因为每次我要搜索整个数据集时都会设置限制,这很麻烦。


2
是否可以在99,999秒内增加此限制?该DBMS connection read time out字段最多只能接受5个数字,将字段设置为0等效于默认参数(600秒)。(Windows 7 64位旗舰版,MySQL Workbench 5.2.47 CE)
Franck Dernoncourt,2013年


4
取消选中“编辑”→“首选项”→“ SQL查询”中的限制行
Jon

7
重新启动后,即使读取超时设置为6000,它也会再次显示错误2013,因此这似乎不是解决方案。
Davicus

4
记住要重新启动Workbench,并先关闭所有打开的查询窗口!
pimbrouwers

32

使用comandline选项net_read_timeout/ wait_timeout和一个合适的值(以秒为单位)启动数据库服务器,例如:--net_read_timeout=100

供参考,请在这里这里


1
这是正确的,但是大多数起起伏伏的答案实际上帮助了我
Sambit Tripathy 2014年

6
如何在命令行中提供此参数?当我尝试连接到数据库时:mysql -u root -p --net_read_timeout = 60还是当我尝试启动服务时?sudo服务mysql启动?未知变量“net_read_timeout”:在这两个地方它给错误
维卡斯戈埃尔

@VikasGoel这是服务器端参数。即mysqld
Chloe

29

如果您的查询包含Blob数据,则可以通过应用此答案中建议my.ini更改来解决此问题

[mysqld]
max_allowed_packet=16M

默认情况下,这将是1M(允许的最大值是1024M)。如果提供的值不是1024K的倍数,它将自动舍入为最接近的1024K倍数。

虽然所引用的线程与MySQL错误2006有关,但将max_allowed_packet1M 设置为16M 确实解决了2013错误,该错误在运行长查询时显示给我。

对于WAMP用户:您将在[wampmysqld]部分中找到该标志。


这正是我的问题。我正在从文件导入数据库备份,而MySQL Workbench报告此2013错误,然后是“操作失败,退出代码1”。事实证明,备份中的大blob列超过了MySQL的默认max_allowed_pa​​cket大小4M。增加此固定它。(MySQL 5.6和Workbench 6.2.3)。谢谢!
zAlbee 2014年

这也是我的解决方法。虽然对于Windows计算机,我将其设置为256M。
smoore4 2015年

原来是16M,多次导入文件时出错,更改为32M,然后开始工作。
hakre '16

15

将以下内容添加到/ etc / mysql / cnf文件中:

innodb_buffer_pool_size = 64M

例:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M

6
您确定文件名/etc/mysql/cnf正确吗?不是/etc/my.cnf吗?
彼得·瓦尔加

12
SET @@local.net_read_timeout=360;

警告:在远程连接中应用以下内容时,它们将不起作用:

SET @@global.net_read_timeout=360;

什么是360?Millisec,秒,分钟?
MasterJoe2 '19

10

此错误信息的三个可能原因

  1. 通常,它表明网络连接有问题,如果此错误频繁发生,则应检查网络状况
  2. 有时,当作为一个或多个查询的一部分发送数百万行时,会发生“查询期间”形式。
  3. 更罕见的是,当客户端尝试与服务器建立初始连接时,可能会发生这种情况

有关更多详细信息, 请阅读>>

原因2:

SET GLOBAL interactive_timeout=60;

从默认的30秒到60秒或更长时间

原因3:

SET GLOBAL connect_timeout=60;

2给我这个错误-代码:1227。访问被拒绝;您需要(至少其中一个)超级权限才能执行此操作
MasterJoe2,19年

9

谢谢!但是随着mysqldb更新,配置已变为:

max_allowed_pa​​cket

net_write_timeout

net_read_timeout

MySQL文档


8

您应该将mysql配置文件中的'interactive_timeout'和'wait_timeout'属性设置为所需的值。


这确实对我有帮助。my.cnf中的“ interactive_timeout”设置为100,太短了。在我将其更改为3600 s(或任何足够大的值)之后,问题解决了
。Thx

7

只需执行一个MySQL升级,将重新构建InnoDB引擎进行MySQL等的正常运作所需的许多表的重建一起performance_schemainformation_schema等等。

从您的shell发出以下命令:

sudo mysql_upgrade -u root -p

该错误直到MySQL Workbench 6.1.4(仅在一段时间后)才出现,并且在6.1.6上也发生(尽管仅在使用几次之后),所以我不确定如何重建多个服务器是针对的最近才出现在一个GUI上的问题。
Davicus,2014年

这解决了我的问题。我刚刚使用Ansible在现有数据库上建立了数据库,事情变得一团糟。运行此命令将一切恢复为正常工作。
Jubz


4

在“编辑”->“首选项”->“ SQL编辑器”->“ MySQL”会话中更改“读取超时”时间


3

请尝试取消选中“编辑”→“首选项”→“ SQL查询”中的限制行

因为您应该将mysql配置文件中的'interactive_timeout'和'wait_timeout'属性设置为所需的值。


3

如果您在还原大转储文件的过程中遇到此问题,并且可以排除与网络有关的问题(例如在localhost上执行),那么我的解决方案可能会有所帮助。

我的mysqldump至少包含一个INSERT,对于mysql来说太大了,无法进行计算。您可以通过show variables like "net_buffer_length";在mysql-cli中键入来查看此变量。您有三种可能性:

  • 增加mysql内部的net_buffer_length->这将需要服务器重新启动
  • 使用以下命令创建转储--skip-extended-insert,每个插入使用一行->尽管这些转储更易于阅读,但不适用于大于1GB的大转储,因为它往往很慢
  • 创建带有扩展插入的转储(这是默认设置),但限制了net-buffer_length,例如,--net-buffer_length NR_OF_BYTES其中NR_OF_BYTES小于服务器的net_buffer_length->我认为这是最好的解决方案,尽管不需要重新启动服务器就比较慢。

我使用以下mysqldump命令: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

加载.csv文件时出现相同的问题。将文件转换为.sql。

使用以下命令,我设法解决此问题。

mysql -u <user> -p -D <DB name> < file.sql

希望这会有所帮助。


2

如果此处所有其他解决方案均失败,请检查系统日志(/ var / log / syslog或类似日志),以查看服务器在查询期间是否内存不足。

在将innodb_buffer_pool_size设置为与物理内存距离太近而未配置交换文件时发生此问题。MySQL建议数据库特定服务器将innodb_buffer_pool_size设置为最大物理内存的80%左右,而我将其设置为90%左右,因为内核正在杀死mysql进程。将innodb_buffer_pool_size移回大约80%,这解决了该问题。


2

就我而言,将连接超时间隔设置为6000或更高的值是行不通的。

我只是做了工作台说的可以做的事情。

查询从DBMS返回数据所用的最长时间。设置为0可跳过读取超时。

在Mac偏好设置-> SQL编辑器->转到MySQL会话->将连接读取超时间隔设置为0。

它有效works


1

我遇到了同样的问题。我相信,当您有指向较大表的外键(这需要时间)时,就会发生这种情况。

我试图在没有外键声明的情况下再次运行create table语句,并发现它可以工作。

然后,在创建表之后,我使用ALTER TABLE查询添加了外键约束。

希望这会帮助某人。


1

这发生在我身上,是因为我的innodb_buffer_pool_size设置为大于服务器上可用的RAM大小。事情因此而中断,并发出此错误。解决方法是使用innodb_buffer_pool_size的正确设置更新my.cnf。


1

转到工作台编辑→首选项→SQL编辑器→DBMS连接读取超时:最多3000个。不再发生该错误。


0

去:

编辑->首选项-> SQL编辑器

在此处,您可以看到“ MySQL Session”组中的三个字段,您现在可以在其中设置新的连接间隔(以秒为单位)。


0

原来我们的防火墙规则阻止了我与MYSQL的连接。解除防火墙策略以允许连接后,我能够成功导入架构。


0

我遇到了同样的问题-但对我来说,解决方案是拥有过于严格权限的DB用户。我不得不允许Executemysql桌子上的能力。允许我不再断开连接之后



0

我在运行存储过程时遇到了这个问题,该过程在数据库的表中创建了很多行。时间跨过30秒边界后,我可以立即看到错误。

我尝试了其他答案中的所有建议。我确信其中某些功能对您有所帮助,但是-对我来说真正起作用的是从Workbench切换到SequelPro。

我猜这是我无法在Workbench中发现的某些客户端连接。也许这也会对其他人有所帮助?


0

如果使用的是SQL Work Bench,则可以尝试使用索引,方法是在表中添加索引,然后再添加索引,然后单击表上的扳手(扳手)符号,它将打开表的设置,如下所示,在索引视图上单击,键入索引名称,并将类型设置为index,在索引列中,选择表中的主列。

对其他表上的其他主键执行相同的步骤。


0

对于那些使用SSH连接到他们的MySQL数据库的人来说,这里似乎缺少答案。您需要检查两个地方而不是其他答案建议的1:

工作台编辑→首选项→SQL编辑器→DBMS

工作台编辑→首选项→SSH→超时

我的默认SSH超时设置得很低,并导致了一些(但不是全部)超时问题。之后,别忘了重启MySQL Workbench!

最后,可能值得联系您的数据库管理员,并要求他们通过my.conf + mysql restart增加mysql本身的wait_timeout和Interactive_timeout属性,或者如果不选择重新启动mysql,则进行全局设置。

希望这可以帮助!


0

请注意以下三点:

  1. 多个查询是否显示失去连接?
  2. 如何在MySQL中使用设置查询?
  3. 如何同时删除+更新查询?

答案:

  1. 始终尝试删除定义器,因为MySQL创建了自己的定义器,并且如果涉及多个表的更新尝试进行单个查询,因为有时多个查询显示连接丢失
  2. 始终将SET值放在顶部,但如果其条件不涉及SET值,则在DELETE之后。
  3. 如果在不同的表上都执行了两项操作,请先删除然后再进行更新

-1

检查一下

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

希望这可以帮助


-1

这通常意味着您“与当前版本的MySQL Server不兼容”,请参见mysql_upgrade。我遇到了同样的问题,只需要运行:

mysql_upgrade --password文档指出,“每次升级MySQL时应执行mysql_upgrade”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.