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

时间:2012-05-12 12:14:18

标签: mysql sql database mysql-workbench

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

有没有增加超时值?

31 个答案:

答案 0 :(得分:373)

新版本的MySQL WorkBench可以选择更改特定的超时。

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

将值更改为6000。

同样取消选中限制行,因为每次我想搜索整个数据集时都会设置限制。

答案 1 :(得分:30)

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

有关参考,请参阅herehere

答案 2 :(得分:17)

如果您的查询包含blob数据,则可以通过应用my.ini更改as proposed in this answer修复此问题:

[mysqld]
max_allowed_packet=16M

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

虽然引用的线程是关于MySQL错误 2006 ,但将max_allowed_packet从1M设置为16M 确实修复了2013年出现的错误运行一个长查询。

对于WAMP用户:您会在[wampmysqld]部分找到该标记。

答案 3 :(得分:14)

将以下内容添加到/ 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

答案 4 :(得分:10)

SET @@local.net_read_timeout=360;

警告:当您在远程连接中应用它时,以下操作无效:

SET @@global.net_read_timeout=360;

答案 5 :(得分:9)

此错误消息可能有三种原因

  1. 通常它表示网络连接故障,如果频繁发生此错误,您应该检查网络状况
  2. 有时会在数百万行作为一个或多个查询的一部分发送时发生“在查询期间”表单。
  3. 更少见的是,当客户端尝试初始连接到服务器时可能会发生这种情况
  4.   

    详细信息 read >>

    原因2:

    SET GLOBAL interactive_timeout=60;
    

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

    原因3:

    SET GLOBAL connect_timeout=60;
    

答案 6 :(得分:8)

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

答案 7 :(得分:8)

谢谢!这很有效。 但是使用mysqldb更新后,配置已成为:

  

max_allowed_pa​​cket的

     

net_write_timeout

     

net_read_timeout

mysql doc

答案 8 :(得分:7)

只需执行MySQL升级即可重新构建innoDB引擎,同时重建MySQL正常运行所需的许多表,例如performance_schemainformation_schema等。

从shell发出以下命令:

sudo mysql_upgrade -u root -p

答案 9 :(得分:4)

我知道它的旧版但是在Mac上

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.

答案 10 :(得分:4)

在Edit-> Preferences-> SQL editor-> MySQL session

中更改“read time out”时间

答案 11 :(得分:3)

有时您的 SQL-Server 会陷入死锁,我已经遇到这个问题 100 次了。您可以重新启动计算机/笔记本电脑以重新启动服务器(简单的方法),或者您可以转到任务管理器>服务>您的服务器名称(对我来说,它是 MySQL785 之类的东西)。然后右键单击>重新启动。 再次尝试执行查询。

答案 12 :(得分:3)

请尝试取消选中编辑→首选项→SQL查询

中的限制行

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

答案 13 :(得分:3)

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

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

  • 在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

答案 14 :(得分:2)

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

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

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

希望这会有所帮助。

答案 15 :(得分:2)

如果这里的所有其他解决方案都失败了 - 请检查您的syslog(/ var / log / syslog或类似的),以查看您的服务器在查询期间是否内存不足。

如果在没有配置交换文件的情况下将innodb_buffer_pool_size设置得太接近物理内存,则会出现此问题。 MySQL recommends for a database specific server setting innodb_buffer_pool_size at a max of around 80% of physical memory,我把它设置为90%左右,内核正在杀死mysql进程。将innodb_buffer_pool_size移回约80%并解决了问题。

答案 16 :(得分:1)

我遇到了同样的问题。我相信当你有更大的表的外键(这需要时间)时会发生这种情况。

我尝试在没有外键声明的情况下再次运行create table语句,发现它有效。

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

希望这会对某人有所帮助。

答案 17 :(得分:1)

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

答案 18 :(得分:0)

我遇到了同样的问题 - 但对我来说,解决方案是一个权限过于严格的数据库用户。 我必须在Execute表上允许mysql能力。在允许之后我不再有掉线了

答案 19 :(得分:0)

由于升级 Mysql 后出现问题,我收到此错误消息。在我尝试执行任何查询后立即出现错误

检查路径 /var/log/mysql (linux) 中的 mysql 错误日志文件

在我的情况下,将 Mysql 所有者重新分配给 Mysql 系统文件夹对我有用

chown -R mysql:mysql /var/lib/mysql

答案 20 :(得分:0)

对于我来说,将连接超时间隔设置为6000或更高的值是行不通的。

我只是按照工作台的说明去做。

  

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

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

它有效?

答案 21 :(得分:0)

要注意的三件事:

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

答案:

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

答案 22 :(得分:0)

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

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

Workbench编辑→首选项→SSH→超时

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

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

希望这会有所帮助!

答案 23 :(得分:0)

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

答案 24 :(得分:0)

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

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

答案 25 :(得分:0)

我在运行存储过程时遇到了这个问题 - 这会在数据库中的表中创建大量行。 在超过30秒的界限后,我可以看到错误。

我在其他答案中尝试了所有建议。我确信它有一些帮助,但是真正让它起作用的是从Workbench切换到SequelPro。

我猜这是我在Workbench中找不到的客户端连接。 也许这会对其他人有帮助吗?

答案 26 :(得分:0)

首先检查索引是否到位。

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'

答案 27 :(得分:0)

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

答案 28 :(得分:0)

转到:

编辑 - &gt;偏好 - &gt; SQL编辑器

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

答案 29 :(得分:-1)

检查

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

希望这有帮助

答案 30 :(得分:-1)

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

mysql_upgrade --password 文档指出,每次升级MySQL&#34;时都应该执行mysql_upgrade。