在 Navicat 中导入 SQL 文件时出现 2006 - MySQL server has gone away 错误,通常与 SQL 文件大小、MySQL 服务器配置或网络连接有关。以下是针对 Navicat 环境的解决方案:

解决方案

1. 增大 MySQL 服务器的 max_allowed_packet 参数

SQL 文件过大时,MySQL 服务器默认会拒绝超过 max_allowed_packet 大小的数据包。

操作步骤

  1. 临时修改(无需重启 MySQL):

    SET GLOBAL max_allowed_packet = 1073741824;  -- 1GB
    需以管理员权限登录 MySQL 执行,修改仅对当前会话有效。
  2. 永久修改(需重启 MySQL):

    • 打开 MySQL 配置文件 my.cnfmy.ini(通常位于 C:\ProgramData\MySQL\MySQL Server X.X\my.ini)。
    • 添加或修改以下行:

      [mysqld]
      max_allowed_packet = 1024M  -- 或更大值
    • 重启 MySQL 服务。

2. 分割大型 SQL 文件

如果 SQL 文件超过 max_allowed_packet 限制,可将其分割为较小的文件。

方法

  • 使用文本编辑器(如 VS Code)手动分割。
  • 使用 Navicat 的“导入向导”逐表导入。
  • 使用命令行工具(如 mysql 客户端)配合 --max_allowed_packet 参数导入:

    mysql -u username -p database_name < large_file.sql --max_allowed_packet=1G

3. 调整 Navicat 导入设置

在 Navicat 中优化导入选项以减少连接超时风险:

  1. 分批执行

    • 在 Navicat 中选择 工具 > 导入向导
    • 选择 SQL 文件,点击 下一步
    • 高级选项 中,启用 分批执行 并设置合理的批次大小(如 1000 行)。
  2. 增加超时时间

    • 在 Navicat 中右键点击数据库连接,选择 连接属性
    • 高级 选项卡中,增大 连接超时执行超时(如 3600 秒)。

4. 检查网络连接稳定性

确保本地与 MySQL 服务器之间的网络稳定,避免长时间操作导致连接断开。

操作建议

  • 暂时关闭防火墙或添加 MySQL 端口(默认 3306)的允许规则。
  • 尝试使用 pingtelnet 测试网络连通性:

    ping your_mysql_server_ip
    telnet your_mysql_server_ip 3306

5. 临时禁用二进制日志(仅适用于测试环境)

在导入大型 SQL 文件时,可临时禁用二进制日志以提高性能:

SET sql_log_bin = 0;  -- 禁用二进制日志
-- 执行导入操作
SET sql_log_bin = 1;  -- 恢复二进制日志

验证修改是否生效

导入前确认 max_allowed_packet 已修改:

SHOW VARIABLES LIKE 'max_allowed_packet';

总结

  1. 优先调整 max_allowed_packet:这是解决大文件导入最有效的方法。
  2. 分割文件:适用于无法修改服务器配置的场景。
  3. 优化 Navicat 设置:通过分批执行和增加超时时间减少错误概率。

如果问题仍然存在,可能需要进一步检查 MySQL 服务器的资源使用情况(如内存、磁盘空间)或联系数据库管理员协助排查。

标签: none

添加新评论