Navicat无法直接备份至FTP,必须分两步:先用其计划任务生成本地.nb3或.sql文件,再通过系统工具(如curl或ftp.exe)上传;误填网络路径将导致静默失败或报错。

Navicat 无法直接把备份文件传到 FTP,必须拆成两步:先本地生成文件,再用系统工具上传。任何试图在 Navicat 计划任务里填 ftp:// 路径或调用 FTP 命令的操作都会失败。
Navicat 的“自动运行”只支持本地文件输出
Navicat 的 自动运行 或 计划任务 功能本质是封装导出逻辑,输出目标仅限本地磁盘路径。它不解析 FTP 协议,也不执行 shell 命令。
- 支持的备份格式只有两种:
.nb3(Navicat 专有,压缩+元数据,只能用 Navicat 还原)和.sql(纯文本,通用但体积大) - 文件名可含变量,如
mydb_%Y%m%d_%H%i%s.sql,但路径必须是绝对本地路径,例如D:ackups;写成\192.168.1.100share或ftp://user:pass@host/会静默失败或报错Cannot create file - Windows 下默认无网络驱动器映射权限,即使映射了
Z:盘,Navicat 进程也可能因权限/会话隔离而访问不到
真正可行的方案:Navicat + Windows 任务计划 + 批处理脚本
核心是让 Navicat 只干一件事:生成本地 .sql 文件;其余交给系统级调度和命令行工具。
- 先在 Navicat 中创建并保存一个
批处理作业(不是直接点“备份”),确保连接密码已保存(否则调度时认证失败) - 用 Windows 任务计划程序新建任务,触发器设为所需时间,操作设置为“启动程序”,程序填
cmd.exe,参数填/c "D:ackupsackup_and_upload.bat" - 批处理脚本内容示例:
cd /d "D:ackups" "C:Program FilesPremiumSoftNavicat Premium 16 avicat.exe" --batch-job="MyBackupJob" --no-splash if exist "mydb_*.sql" ( curl -T "mydb_%date:~0,4%%date:~5,2%%date:~8,2%.sql" "ftp://user:pass@192.168.1.100/backups/" ) else ( echo Backup file not found ) - 关键细节:
%date格式在 cmd 中不可用%Y%m%d,必须用%date:~0,4%%date:~5,2%%date:~8,2%;任务属性中必须勾选“不管用户是否登录都要运行”,并输入当前用户密码(否则 FTP 步骤因无交互桌面卡住)
为什么不用 MySQL EVENT 或 Navicat 内置调度?
MySQL 的 EVENT 调度器只能执行 SQL 语句,不能调用操作系统命令(如 mysqldump 或 ftp),所以它完全无法生成文件或上传——哪怕你开了 event_scheduler=ON,也只影响库内操作(比如清表、统计),跟备份导出无关。
- Navicat 免费版、macOS/Linux 版本压根没有
自动运行功能,所谓“点几下就定时上传 FTP”是常见误解 - 如果坚持用系统
ftp.exe,需额外写ftp-script.txt配合,不如直接上curl(更稳定,支持 URL 参数,无需临时脚本文件) - 密码明文写进脚本极不安全,生产环境应改用
mysql_config_editor(MySQL)或.pgpass(PostgreSQL)配合
最容易被忽略的是:Navicat 批处理作业必须先“保存”,才能被调度识别;任务计划里的“起始于”路径必须填对,否则 mysqldump 或脚本中的相对路径全部失效。这些细节不处理,整个链路会在无声中中断。











