MySQL 表新增字段时报丢失连接错误

 更新时间:2026年01月25日 14:31:28   作者:一线大码  
MySQL在新增字段时遇到"Lost connection to MySQL server during query"错误,可能由于网络问题、查询超时或内存不足等原因,下面就来详细的介绍一下该问题的解决,感兴趣的可以了解一下

1. 问题描述

有一张MySQL数据库表,业务变动,需要新增一个业务字段,于是直接用下面的SQL语句进行字段新增:

ALTER TABLE table_name ADD `add_field` tinyint(1) DEFAULT NULL COMMENT '新增字段';

使用Navicat for MySQL执行该语句会报一个错误,如下图所示:

2013 - Lost connection to MySQL server during query,翻译过来就是在查询过程中,MySQL服务器失去连接。

该问题是大约一年前遇到的(2020年我写的文章),最近整理笔记看到了,趁有时间做一些整理记录。但是当时的具体环境已经无法复现了。

2. 官方文档

MySQL 官方文档的附录中有一篇是讲 MySQL 服务器连接断开。下面是我翻译的内容:

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

通常它表示网络连接有问题,如果这个错误经常发生,你应该检查一下你的网络状况。如果提示的错误消息包含"during query"字符,那么您遇到的情况可能就是这种原因。

有时,当几百万行作为一个或多个查询的一部分被发送时,就会发生"during query"表单。如果您知道发生了这种情况,那么您应该尝试将net_read_timeout从默认的30秒增加到60秒或足以完成数据传输的更长时间。

更少见的情况是,当客户端试图初始化连接到服务器时,会发生这种情况。在这种情况下,如果connect_timeout值被设置为几秒,那么您可以通过将其增加到10秒来解决问题,如果您的连接距离很长或速度较慢,那么时间可能会更长。你可以通过查询Aborted_connects来确定你是否正在经历这种更不常见的原因。服务器每中止一个初始连接尝试,它的值就会增加1。如果错误消息包括"reading authorization packet",表明这正是您所需要的解决方案。

SHOW GLOBAL STATUS LIKE 'Aborted_connects'

如果原因不是以上所述的,你可能遇到了BLOB值大于max_allowed_packet的问题,这可能导致某些客户端出现此错误。有时你可能还会看到一个ER_NET_PACKET_TOO_LARGE错误,可以确定是需要提高max_allowed_packet值了。

SHOW VARIABLES LIKE '%max_allowed_packet%';

3. 解决办法

通过查阅官方文档,不难看出其实比较符合第一条解释。结合当时那家公司的网络,确实经常的时断时续的,网络环境比较差。

MySQL的这个错误除了官方说的几种情况,还需要针对自己的业务场景进行适当探索和甄别,具体情况具体分析。这里再记录一下另一种可能,因为ALTER TABLE操作是比较耗时的,所以也很有可能是因为超时原因报的错误。查询关于超时时间的系统变量:

SHOW VARIABLES LIKE '%timeout%';

高性能MySQL这本书的第四章Schema与数据优化提到了以下内容:

MySQL的ALTER TABLE操作的性能对大表来说是个问题。MySQL执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表。这样操作可能需要花费很长时间,如果内存不足表又很大,而且还有很多索引的情况下尤其如此。

一般而言,大部分ALTER TABLE操作将导致MySQL服务中断。对于常见场景,能使用的技巧只有两种:一种是先在一台不提供服务的机器上执行ALTER TABLE操作,然后和提供服务的主库进行切换;另一种技巧是影子拷贝,就是用要求的表结构创建一张与源表无关的新表,然后通过重命名和删表操作交换两张表。

ALTER TABLE允许使用ALTER COLUMN、MODIFY COLUMN、CHANGE COLUMN三种语句修改列。这三种操作都是不一样的。

可以结合MySQL错误日志,找到需要修改的系统变量,进行相应修改即可。

到此这篇关于MySQL 表新增字段时报丢失连接错误的文章就介绍到这了,更多相关MySQL 表新增字段时丢失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 全面解析MySQL Explain如何优化SQL查询性能

    全面解析MySQL Explain如何优化SQL查询性能

    在 MySQL 中,EXPLAIN 关键字可以帮助我们分析查询执行计划,从而优化查询性能,所以本文就来和大家详细讲讲Explain是如何优化SQL查询性能的
    2023-05-05
  • MySql中JOIN关键字详细使用

    MySql中JOIN关键字详细使用

    文章介绍了SQL中的四种连接类型:INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLJOIN,并通过图形化示例展示了它们的区别,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • linux下mysql开启远程访问权限 防火墙开放3306端口

    linux下mysql开启远程访问权限 防火墙开放3306端口

    这篇文章主要为大家详细介绍了linux下mysql开启远程访问权限,防火墙开放3306端口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • MySQL创建定时任务

    MySQL创建定时任务

    本文详细讲解了MySQL创建定时任务的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • mysql表的内连和外连实战记录

    mysql表的内连和外连实战记录

    在开发中我们的业务需求有时候是复杂的,多张表联合查询的时候是有多种方式的,面对不同的需求,灵活使用不同的表连接方式,这篇文章主要给大家介绍了关于mysql表内连和外连的相关资料,需要的朋友可以参考下
    2024-01-01
  • MySQL8.0创建用户和权限控制示例详解

    MySQL8.0创建用户和权限控制示例详解

    这篇文章主要为大家介绍了MySQL8.0创建用户和权限控制实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • mysql数据库中的索引类型和原理解读

    mysql数据库中的索引类型和原理解读

    这篇文章主要介绍了mysql数据库中的索引类型和原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • mysql的group_concat函数使用示例

    mysql的group_concat函数使用示例

    这篇文章主要介绍了mysql的group_concat函数使用示例,需要的朋友可以参考下
    2014-04-04
  • mysql删除字段的基本语法和示例

    mysql删除字段的基本语法和示例

    在MySQL中,使用ALTER TABLE语句配合DROP COLUMN子句可以删除表中的某个字段,示例中,从employees表中删除email字段,此操作会永久删除该字段的数据,因此需提前备份,需要的朋友可以参考下
    2024-09-09
  • MySQL中三种关联查询方式的简单比较

    MySQL中三种关联查询方式的简单比较

    这篇文章主要介绍了MySQL中三种关联查询方式的简单比较,即ON和USING还有传统的FROM...WHERE...,需要的朋友可以参考下
    2015-06-06

最新评论