Navicat中应使用“运行SQL文件”而非“还原备份”导入mysqldump生成的.sql文件,因后者仅支持.nb3格式;需确保目标数据库存在且为空,注意字符集兼容性、SQL模式及大文件超时设置。
Navicat里点“运行SQL文件”就能还原mysqldump备份
直接用 运行sql文件 功能,而不是“还原备份”,因为 .sql 文件不是 navicat 自己的 .nb3 备份格式。选错入口会导致按钮灰掉或报错“无法识别备份文件”。
还原前必须确认目标数据库已存在且为空(或可被覆盖)
Navicat 的 运行SQL文件 不会自动创建数据库,也不会跳过已存在的表——它只是顺序执行 SQL 语句。如果 .sql 文件开头含 CREATE DATABASE,但目标连接下已有同名库,就会卡在 ERROR 1007 (HY000): Can't create database 'xxx'; database exists;如果没这句,而目标库不存在,就直接报 Unknown database。
- 稳妥做法:先手动建好空库(如
CREATE DATABASE `fms-simple` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;) - 或者用文本编辑器打开
.sql文件,删掉或注释掉DROP DATABASE/CREATE DATABASE行(如果不需要重建库) - 若要清空旧数据再导入,可在运行前手动执行
DROP TABLE或勾选“忽略错误继续执行”(但不推荐,容易漏失败)
注意字符集和时间类型兼容性问题
mysqldump 默认导出的 .sql 文件可能含 SET NAMES utf8mb4 或 DEFAULT CHARSET=utf8mb4,但如果 Navicat 连接时用的是老版本 MySQL(如 5.7)且未启用 utf8mb4 支持,执行到 emoji 字段时会报 ERROR 1366 (HY000);另外 MySQL 8.0+ 的 TIMESTAMP 默认行为变更,也可能导致插入失败。
- 检查 Navicat 连接属性里的“字符集”是否设为
utf8mb4 - 若 dump 文件来自 MySQL 8.0+,而目标是 5.7,建议加
--compatible=mysql57重新导出 - 遇到
ERROR 1067(Invalid default value)时,临时执行SET sql_mode='';再运行 SQL 文件(仅调试用)
大文件导入卡住或超时?调 Navicat 的执行参数
默认情况下,Navicat 对单次 SQL 执行有内存和超时限制。一个 200MB 的 .sql 文件很可能导入到一半就中断,提示“连接已关闭”或“执行超时”,而不是报具体 SQL 错误。
- 打开
工具 → 选项 → SQL 编辑器,把“最大执行时间(秒)”调高(如 3600) - 取消勾选“限制返回行数”,避免
SELECT类语句截断干扰 - 更稳的方式:用命令行
mysql -u root -p fms-simple 导入完,再用 Navicat 刷新查看
运行SQL文件 是单线程顺序执行,不会并行建表或批量插入优化——它完全依赖你提供的 SQL 文件本身的写法。如果你的 mysqldump 没加 --skip-extended-insert,那每条 INSERT 只插一行,速度极慢;而加了它,Navicat 就得一口气解析几万行值,内存占用陡增。要不要拆分、要不要换方式,得看文件大小和你的恢复容忍度。











