navicat 不支持异地冷备份,需借助系统级映射或数据库原生命令实现;其备份功能仅限本地路径,unc 路径会报错;冷备份需人工控制数据库断连时机;sql server 可用 xp_cmdshell 映射网络驱动器后备份,mysql 则依赖 mysqldump + 计划任务。

Navicat 本身不支持“异地冷备份”这个动作——它只能触发本地备份或执行 SQL 脚本,异地写入必须靠 Windows 系统级能力(如 net use 映射网络驱动器)或数据库原生命令(如 SQL Server 的 BACKUP DATABASE ... TO DISK 直接写远程路径)来实现。所谓“冷备份”,本质是备份时数据库连接已断开、无写入流量,这需要你控制触发时机,而非 Navicat 自动提供。
为什么“异地”必须绕开 Navicat 默认备份路径
Navicat 的图形化“备份数据库”操作默认只接受本地绝对路径(例如 D:ackups),不支持 \192.168.1.100share 这类 UNC 路径。一旦填入,会直接报错:Failed to create backup file: Access is denied. 或静默失败。
- 根本原因:Navicat 调用的是自身封装的导出逻辑,底层未启用 Windows 网络凭据透传,无法以当前用户身份访问未预先映射的共享目录
- 验证方法:手动在资源管理器中打开
\192.168.1.100ackup,如果提示输入密码,说明 Navicat 同样无法直连 - 可行替代:改用“运行 SQL 文件”方式,把备份逻辑交给数据库服务端执行(SQL Server / MySQL 5.7+ 支持写入 UNC 路径),Navicat 只负责定时调用
SQL Server 场景:用 xp_cmdshell + BACKUP DATABASE 写入异地共享
这是最稳定、生产环境常用的方式。前提是你有 sysadmin 权限,且已启用 xp_cmdshell(需 DBA 审批)。
- 先在目标备机上建好共享文件夹(如
\192.168.1.100sqlbak),并确保数据库服务器能 ping 通、端口 445 开放 - 在共享目录上给 SQL Server 服务账户(不是你登录 Windows 的账户)授予“修改”权限;若用 LocalSystem,则需在备机上为
Everyone开临时读写(仅测试用) - SQL 脚本关键三步必须写全:
USE master GO -- 1. 映射网络驱动器(Z: 是临时盘符,不能与本地冲突) EXEC xp_cmdshell 'net use Z: \192.168.1.100sqlbak password /user:DOMAINusername', no_output <p>-- 2. 删除旧备份(防止磁盘满) EXEC xp<em>cmdshell 'del "Z:myapp</em>$(ESCAPE_NONE(DATE)).bak"', no_output</p><p>-- 3. 执行备份(注意路径用 Z:,不是 UNC) BACKUP DATABASE [myapp] TO DISK = N''Z:myapp_$(ESCAPE_NONE(DATE)).bak'' WITH INIT, COMPRESSION GO</p><p>-- 4. (可选)断开映射 EXEC xp_cmdshell 'net use Z: /delete', no_output</p>
-
$(ESCAPE_NONE(DATE))是 SQL Server Agent 支持的变量,Navicat 不识别;得换成CONVERT(VARCHAR(10), GETDATE(), 120)或硬编码时间戳 - 脚本保存为
sqlserver_remote_backup.sql,在 Navicat 中右键 → “运行 SQL 文件”,确认能手动执行成功后再进计划任务
MySQL 场景:用 mysqldump + Windows 计划任务组合实现
Navicat 对 MySQL 的“备份数据库”功能不支持远程路径,但你可以用它调度一个外部命令——即调用系统 mysqldump,输出到已映射的网络盘。
- 先在数据库服务器上确认
mysqldump可执行路径,比如C:Program FilesMySQLMySQL Server 8.0inmysqldump.exe - 写一个
backup_mysql_to_nas.bat批处理(注意:必须用绝对路径,且含完整账号密码):
@echo off set BACKUP_DIR=Z:mysql_backups set DATESTR=%date:~0,4%%date:~5,2%%date:~8,2% "C:Program FilesMySQLMySQL Server 8.0inmysqldump.exe" -h127.0.0.1 -uadmin -pMyPass123 myapp > "%BACKUP_DIR%myapp_%DATESTR%.sql"
- 在 Navicat 中新建“批处理作业” → 左侧选库 → 右侧点“运行外部程序” → 填入该 bat 文件绝对路径
- 设置任务计划时,务必勾选“不管用户是否登录都要运行”,否则休眠后 bat 无法访问映射盘 Z:
- 映射 Z: 必须在系统级完成:用管理员身份运行一次
net use Z: \192.168.1.100mysqlshare /persistent:yes,否则每次重启后失效
最容易被忽略的三个权限/路径细节
90% 的异地备份失败都卡在这三点,和 Navicat 操作步骤无关:
- Windows 任务计划程序运行账户必须是**能访问共享目录的域账户或本地账户**,空密码、PIN 登录、微软账户(@outlook.com)均不被接受;必须用传统 Windows 密码(至少 8 位,含大小写+数字)
- Navicat 备份生成的
.psc文件只是计划描述,真正执行的是navicat.exe --runjob "jobname",所以navicat.exe的工作目录决定了相对路径解析位置——一律用绝对路径 - SQL Server 的
BACKUP命令写 UNC 路径虽可行,但要求 SQL Server 服务账户对目标共享有写权限;而用net use映射再写本地盘符,权限判断走的是“运行 SQL Server 的账户”,不是“执行 SQL 的登录名”,别混淆











