【已解决】[Err] MySQL server has gone away

本文介绍了如何解决因SQL文件过大导致的MySQL备份导入错误,包括调整max_allowed_packet参数及处理外键约束失败的问题。
今天更新数据库,同事给发来个20M的psc文件,这是数据库备份文件,从这个备份文件里提取了200M 的sql文件,然后运行了这个sql文件,然后就出现了标题的错误
[Err] 2006 - MySQL server has gone away
这是因为sql文件太大了,把mysql安装目录下的my.ini文件中的 max_allowed_packet=***M,这个*** 是个数字,要大于你的sql文件大小。我的sql文件200M,我把这个改成了max_allowed_packet=300M ,再运行sql,运行完毕没有报错。


运行sql文件恢复备份出错[Err] Cannot add or update a child row: a foreign key constraint fails

mysql添加外键失败,这是因为要添加的外键和表中的主键不匹配,这个我是和 MySQL server has  gone away 一起出现的,这就好理解了。直接重新运行了sql文件搞定。
解决的过程就是:删除所有表数据,重新创建表,重新插入数据。当然这个过程都是运行sql文件自动执 行的。
### Navicat ERR 2006 MySQL server has gone away解决方案 当在 Navicat 中运行 SQL 文件时,如果遇到 `[ERR] 2006 - MySQL server has gone away` 错误,通常是因为 MySQL 数据库服务器断开了连接。以下是可能的原因以及对应的解决办法: #### 1. **调整 `max_allowed_packet` 参数** 如果要导入的 SQL 文件过大(例如超过默认允许的最大包大小),可能会触发该错误。可以通过修改 MySQL 配置文件中的参数来解决问题。 修改配置文件路径通常是 `C:\ProgramData\MySQL\MySQL Server 8.0\my.ini` 或其他安装位置下的 `my.cnf` 文件,在其中增加或修改如下内容: ```ini max_allowed_packet=100M ``` 此处可以根据实际需求适当增大数值[^3]。 #### 应用更改并验证 修改完成后需重启 MySQL 服务以使更改生效。可以在 Windows 上按下 `Win+R` 并输入 `services.msc` 来管理服务,找到 MySQL 对应的服务项后重新启动它。 --- #### 2. **临时设置 `max_allowed_packet` 变量** 若无法定位到 `my.ini` 或者不想永久改变全局配置,也可以通过 Navicat 连接到数据库后执行以下命令动态调整变量值: ```sql SET GLOBAL max_allowed_packet=104857600; ``` 注意单位是以字节计数,上述语句表示将最大包尺寸设为 100MB[^4]。 动态调整的优点在于无需停止和重启整个 MySQL 服务,缺点则是每次重启服务都会恢复成初始状态。 --- #### 3. **检查超时时间设置** 默认情况下,MySQL 客户端与服务器之间的交互存在一定的等待时限。长时间未收到响应可能导致连接被关闭。为此可尝试延长 `wait_timeout` 和 `interactive_timeout` 参数的时间长度。 编辑相同的配置文件加入下面两行代码: ```ini wait_timeout=28800 interactive_timeout=28800 ``` 将这两个值均设定为较高数值(如上面例子所示代表 8 小时)。同样需要重启服务才能让新设置起作用。 --- #### 4. **确认用户权限是否充分** 新建账号或者迁移环境之后容易忽略赋予足够的操作许可给指定用户。假如目标用户的访问范围受限,则有可能引发类似的异常状况。 使用管理员身份登录至 MySQL 控制台授予完全控制权予特定用户名下所有主机地址上的资源访问请求: ```sql GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; ``` 替换 `'your_username'` 和 `'password'` 成对应的实际信息[^5]。 --- #### 5. **分批执行大容量脚本** 当单次提交的数据规模特别庞大时,即使完成了前面提到的各项优化措施仍可能出现不稳定现象。此时建议把原始的大文件拆分成若干个小部分逐一加载进去。 利用文本编辑工具手动分割源码文档;或者是编写简单的 Shell/Python 脚本来自动化完成这项工作。比如 Python 实现方式如下: ```python import os chunk_size = 10_000_000 # 每份大约 10 MB input_file_path = r"C:\path_to_your_large_sql.sql" with open(input_file_path, encoding="utf-8") as f: part_num = 1 while True: lines = f.readlines(chunk_size) if not lines: break output_part_name = f"{input_file_path}.part{part_num}" with open(output_part_name, mode='w', encoding="utf-8") as out_f: out_f.writelines(lines) part_num += 1 ``` 然后再逐一对这些子文件调用 Navicat 导入功能。 --- ### 总结 综合以上分析可知,针对 `[ERR] 2006 - MySQL server has gone away` 问题可以从多个角度入手排查并修复。具体实施过程中应当依据具体情况灵活选用适合的方法组合起来使用效果更佳。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值