错误代码: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_schema
、information_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_packet 大小 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";
来查看此变量。
你有三种可能:
--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 服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章
Django OperationalError(2013,“查询期间丢失与 MySQL 服务器的连接”)
2013, '在查询期间丢失与 MySQL 服务器的连接 - Pymysql Microsoft sql server management Studio
DBeaver 错误 2013:与 MySQL 的连接丢失。为啥?