繁体   English   中英

错误代码:2013。在查询过程中失去与 MySQL 服务器的连接

[英]Error Code: 2013. Lost connection to MySQL server during query

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

是否可以增加超时值?

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

对我来说,它是在 Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 600

将值更改为 6000。

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

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

[mysqld]
max_allowed_packet=16M

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

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

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

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

有关参考,请参阅此处此处

将以下内容添加到 /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
SET @@local.net_read_timeout=360;

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

SET @@global.net_read_timeout=360;

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

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

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

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

  1. 通常表示网络连接有问题,如果经常出现此错误,您应该检查网络状况
  2. 有时,当作为一个或多个查询的一部分发送数百万行时,会出现“查询期间”表单。
  3. 更罕见的是,当客户端尝试与服务器进行初始连接时会发生这种情况

更多详情请阅读>>

原因2:

SET GLOBAL interactive_timeout=60;

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

原因3:

SET GLOBAL connect_timeout=60;

就我而言,将连接超时间隔设置为 6000 或更高的值不起作用。

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

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

在 Mac Preferences -> SQL Editor -> Go to MySQL Session -> 将连接读取超时间隔设置为 0。

它有效😄

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

从您的 shell 发出以下命令:

sudo mysql_upgrade -u root -p

我知道它很旧,但在 mac 上

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

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

我的 mysqldump 至少保存了一个对 mysql 来说太大而无法计算的 INSERT。 您可以通过键入show variables like "net_buffer_length";来查看此变量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

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

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

在 Edit->Preferences->SQL editor->MySQL session 中更改“读取超时”时间

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

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

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

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

希望这会有所帮助。

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

在没有配置交换文件的情况下将 innodb_buffer_pool_size 设置得太接近物理内存时会出现此问题。 MySQL 建议将特定于数据库的服务器设置 innodb_buffer_pool_size 最大为物理内存的 80% 左右,我将其设置为 90% 左右,内核正在杀死 mysql 进程。 将 innodb_buffer_pool_size 移回 80% 左右,从而解决了问题。

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

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

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

希望这会帮助某人。

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

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

去:

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

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

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

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

首先检查索引是否到位。

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

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

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

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

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

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

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

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

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

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

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

希望这可以帮助!

要遵循并确保以下三件事:

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

答案:

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

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

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

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

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

首先建立连接mysql --host=host.com --port=3306 -u username -p然后选择你的数据库use dbname然后 source 哑source C:\\dumpfile.sql 完成后\\q

我的观察——

当您一起运行 MySQL Workbench 和终端并在终端中运行时 -

SET AUTOCOMMIT = 0;

或者

START TRANSACTION;

那么你通常会面临这样的问题。

甚至之后——

SET AUTOCOMMIT = 1;

或者

COMMIT;

问题依然存在。

您需要从终端和 MYSQL 工作台注销,然后再次登录或重新启动。

检查一下

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

希望这可以帮助

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM