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

Posted

技术标签:

【中文标题】错误代码:2013。查询期间丢失与 MySQL 服务器的连接【英文标题】:Error Code: 2013. Lost connection to MySQL server during query 【发布时间】:2012-05-20 18:34:25 【问题描述】:

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

有没有办法增加超时值?

【问题讨论】:

【参考方案1】:

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

有关参考,请参阅 here 和 here。

【讨论】:

如何在命令行中提供这个参数?当我尝试连接到数据库时:mysql -u root -p --net_read_timeout=60 或者当我尝试启动服务时? sudo 服务 mysql 启动?在这两个地方都给出错误:未知变量'net_read_timeout' @VikasGoel 是服务器端参数。 IE。 mysqld.【参考方案2】:

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

【讨论】:

这对我有帮助。 my.cnf 中的“interactive_timeout”设置为 100,太短了。在我将其更改为 3600 s(或任何对您来说足够大的值)后,问题已解决。Thx【参考方案3】:

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

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

将值更改为 6000。

还没有检查限制行,因为每次我想搜索整个数据集时都设置一个限制会让人厌烦。

【讨论】:

是否可以将此限制增加到 99,999 秒以上? DBMS connection read time out 字段最多只能接受 5 位数字,将该字段设置为 0 相当于默认参数(600 秒)。 (Windows 7 64 位旗舰版,MySQL Workbench 5.2.47 CE) 在***.com/q/16877574/395857之后,这个问题现在已经解决了(bugs.mysql.com/bug.php?id=69395) 在编辑 → 首选项 →SQL 查询中取消选中限制行 重新启动后,即使读取超时设置为 6000,它仍然再次显示错误 2013,因此这似乎不是解决方案。 记得重启 Workbench 并先关闭所有打开的查询窗口!【参考方案4】:

只需执行 MySQL 升级,这将重新构建 innoDB 引擎以及重建 MySQL 正常运行所需的许多表,例如 performance_schemainformation_schema 等。

从您的 shell 发出以下命令:

sudo mysql_upgrade -u root -p

【讨论】:

该错误直到 MySQL Workbench 6.1.4 才出现(并且仅在一段时间之后)并且也发生在 6.1.6 上(尽管仅在几次使用之后)所以我不确定重建多台服务器如何解决最近才出现在一个 GUI 上的问题。 这解决了我的问题。我刚刚使用 Ansible 在现有数据库上设置了数据库,但事情变得一团糟。运行此命令将一切恢复正常。【参考方案5】:

如果您的查询有 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] 部分找到标志。

【讨论】:

这正是我的问题。我正在从文件中导入数据库备份,MySQL Workbench 报告了这个 2013 错误,然后是“操作失败,退出代码 1”。事实证明,备份的大 blob 列超过了 MySQL 的默认 max_allowed_pa​​cket 大小 4M。增加这个修复它。 (MySQL 5.6 和工作台 6.2.3)。谢谢! 这也是我的解决方案。虽然我为 Windows 机器设置为 256M。 有 16M,导入文件多次出现该错误,更改为 32M,然后它工作了。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

我知道它是旧的,但在 mac 上

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

【讨论】:

感谢它的工作!完整路径:MYSQLWORKBENCH->Database->Manage Connections->Advanced 选项卡,将 Socket Timeout (sec) 设置为更大的值。【参考方案8】:

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

【讨论】:

您确定文件名/etc/mysql/cnf 正确吗?不应该是/etc/my.cnf吗? 文件名会因操作系统和/或安装配置而异。【参考方案9】:
SET @@local.net_read_timeout=360;

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

SET @@global.net_read_timeout=360;

编辑:360是秒数

【讨论】:

什么是 360?毫秒、秒、分? 秒数dev.mysql.com/doc/refman/8.0/en/…【参考方案10】:

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

我的 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

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

检查一下

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

希望对你有帮助

【讨论】:

【参考方案13】:

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

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

【讨论】:

【参考方案14】:

我在加载 .csv 文件时遇到了同样的问题。 将文件转换为 .sql。

使用下面的命令我设法解决了这个问题。

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

希望这会有所帮助。

【讨论】:

【参考方案15】:

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

    通常表示网络连接有问题,如果经常出现此错误,请检查网络状况 有时,当作为一个或多个查询的一部分发送数百万行时,会出现“查询期间”形式。 这种情况很少发生在客户端尝试与服务器建立初始连接时

更多详情 read >>

原因2:

SET GLOBAL interactive_timeout=60;

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

原因 3:

SET GLOBAL connect_timeout=60;

【讨论】:

2 给我这个错误 - 代码:1227。访问被拒绝;您需要(至少其中一项)超级权限才能执行此操作【参考方案16】:

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

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

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

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

【讨论】:

【参考方案17】:

如果此处的所有其他解决方案均失败 - 检查您的系统日志(/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% 左右,从而解决了问题。

【讨论】:

【参考方案18】:

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

【讨论】:

【参考方案19】:

转到:

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

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

【讨论】:

【参考方案20】:

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

【讨论】:

【参考方案21】:

我遇到了同样的问题 - 但对我来说,解决方案是权限过于严格的数据库用户。 我必须在mysql 表上允许Execute 功能。在允许之后,我没有断开连接了

【讨论】:

【参考方案22】:

首先检查索引是否到位。

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

【讨论】:

【参考方案23】:

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

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

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

【讨论】:

【参考方案24】:

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

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

【讨论】:

【参考方案25】:

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

【讨论】:

【参考方案26】:

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

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

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

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

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

希望这会有所帮助!

【讨论】:

【参考方案27】:

三件事要遵循并确保:

    多个查询是否显示连接断开? 如何在 MySQL 中使用集合查询? 如何同时删除+更新查询?

答案:

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

【讨论】:

【参考方案28】:

在我的情况下,将连接超时间隔设置为 6000 或更高的值不起作用。

我只是做了工作台上说我能做的事。

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

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

它有效?

【讨论】:

【参考方案29】:

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

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

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

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

【讨论】:

【参考方案30】:

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

【讨论】:

以上是关于错误代码:2013。查询期间丢失与 MySQL 服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章

在查询异常期间丢失与 MySQL 服务器的连接

Django OperationalError(2013,“查询期间丢失与 MySQL 服务器的连接”)

2013, '在查询期间丢失与 MySQL 服务器的连接 - Pymysql Microsoft sql server management Studio

DBeaver 错误 2013:与 MySQL 的连接丢失。为啥?

Django 1.3 的随机错误“在查询期间丢失与 MySQL 服务器的连接”[关闭]

查询期间丢失与 MySQL 服务器的连接 - Python、MySql