Navicat中批量导出多张表为单个SQL文件的正确方法是:按住Ctrl多选表→右键→“转储SQL文件”→勾选“结构和数据”,生成可读、可编辑的标准SQL脚本;不可用数据库右键“备份”功能替代,因其仅支持.nb3格式且多表勾选易失效。

右键表名选“转储SQL文件”是最直接的方式
Navicat 15 不支持在「备份」主功能里勾选多张表后一键导出为单个 .nb3 文件(那是全库/单库级备份才用的格式),真正能精准控制“只导哪几张表”的路径,是逐个或批量右键表 → 选 转储SQL文件。这个操作生成的是标准 SQL 脚本,含 CREATE TABLE 和 INSERT,可读、可编辑、跨平台还原。
常见错误现象:有人点数据库右键 → 备份,进界面后试图在对象列表里只勾选几张表——这看似合理,但实际导出的仍是 .nb3 格式,且 Navicat 15 对部分 MySQL 版本存在勾选失效问题(尤其当表名含下划线或数字开头时),最终可能漏表或静默跳过。
- 务必先确认左上角连接图标旁显示的是真实数据库类型(如
MySQL),不是灰色图标或误配的PostgreSQL - 若要导出多张表,可按住
Ctrl多选表名,再统一右键 →转储SQL文件;不支持 Shift 连续选 - 导出时在弹窗中明确选择
结构和数据(别选“仅结构”,除非你真只要建表语句) - 文件名建议手动输入,例如
user_order_log_20260907.sql,避免空格和中文
用“新建备份”+对象筛选也能做,但有隐藏限制
「新建备份」流程可以指定表,但它本质调用的是底层命令行工具(如 mysqldump),而 Navicat 15 在 Windows 下对多表参数拼接较脆弱。尤其是当表名含特殊字符、数量超过 10 张、或数据库名本身带短横线(如 my-app)时,容易报错 Unknown table 'xxx' in information_schema 或导出为空。
如果你坚持走这个路径,必须:
- 右键目标数据库 →
备份→ 切换到对象选择选项卡 - 展开表列表,**逐一手动勾选**,不要依赖搜索框过滤后全选(搜索结果勾选有时不同步到底层参数)
- 在高级选项中,勾选
Remove DEFINER and SQL SECURITY,否则还原时可能因用户权限缺失失败 - 备份格式选
Navicat Backup File (.nb3)时,无法用文本编辑器查看内容;选SQL File (.sql)才能确保是纯 SQL
自动定时备份几张表?别信“计划任务里选几张表”这种说法
Navicat 的「自动运行」→「批处理作业」里,所谓“选择几张表”,其实是把多个独立备份操作拼成一个队列,不是原子化的一次性导出。也就是说:它会依次执行 N 次 mysqldump -t table1、mysqldump -t table2……每张表一个文件。你无法得到一个包含所有表的单一 SQL 文件。
更麻烦的是:如果某张表在执行中途被锁或 DDL 变更,后续表可能跳过而不报错,日志里只显示 Completed: 3/5 却不提示失败原因。
- 如需真正可控的定时多表备份,推荐写一个外部脚本(如 PowerShell 或 Bash),调用
mysqldump命令拼接表名,再用 Navicat 的「外部应用程序」方式触发 - Navicat 自身的计划任务,只适合对稳定性要求不高、表结构极少变动的场景
- 注意:Windows 任务计划程序里运行 Navicat 批处理时,必须勾选
使用最高权限运行,否则可能因 UAC 拦截导致备份静默失败
导出的 SQL 文件还原时要注意什么
用 转储SQL文件 得到的 .sql,还原时不能双击打开——那只是文本。必须回到 Navicat,右键目标数据库 → 运行SQL文件,然后选中该文件。
典型翻车点:
- 还原前没清空原表,导致
INSERT报主键冲突;建议导出时勾选Drop tables before create(在转储弹窗的「高级」里) - SQL 文件里含
USE `db_name`,但还原时连的是另一个库,结果语句执行到了错误库——解决方法是还原前先手动删掉文件开头的USE行 - 时间字段含
NOW()或CURRENT_TIMESTAMP,还原后值变成执行时刻,而非原备份时刻;若需精确还原,导出时应禁用Extended Insert并检查是否启用了Complete insert
最易被忽略的一点:Navicat 导出的 SQL 默认不包含 SET NAMES utf8mb4,如果原库用的是 utf8mb4_unicode_ci,还原后中文可能变问号。手动在文件开头加一行即可。


















