macos 版 navicat 无法直接将自动备份路径设为外接硬盘挂载点,因系统权限模型与挂载时机限制;需通过符号链接(指向 /volumes/卷名)+ launchd 脚本(含挂载检测与清理)实现可靠备份。
macos 版 navicat 无法直接把自动备份路径设成外接硬盘的挂载点——不是功能缺失,而是 macos 的权限模型和挂载时机导致的硬性限制。你得手动干预挂载逻辑和脚本路径,否则备份会静默失败或写入错误位置。
为什么「设置位置」里选外接硬盘路径会失效
Navicat 的「连接属性 → 高级 → 设置位置」只接受已挂载且当前可写的路径。但 macOS 外接硬盘默认挂载在 /Volumes/YourDiskName,而该路径在系统重启、休眠唤醒或用户未登录时可能不存在;Navicat 启动时若该路径不可达,会自动 fallback 到默认备份目录(~/Documents/Navicat/[Product]/Backups),且不报错。
- 挂载名含空格或特殊字符(如
My Passport)会导致 Navicat 内部路径解析失败,表现为备份文件生成在用户文档目录下 - 外接硬盘使用 exFAT 或 NTFS 格式时,macOS 默认以只读方式挂载,Navicat 写入失败但无明确提示
- 「设置位置」保存后,Navicat 不校验路径有效性,仅在实际备份时尝试写入 —— 此时若磁盘已拔出,备份静默跳过
正确做法:用符号链接绕过挂载不确定性
不依赖 Navicat 界面直选外接硬盘路径,而是把备份目标固定到一个本地路径,再用符号链接指向外接硬盘的实际挂载点。这样既规避了挂载时机问题,又保持 Navicat 配置稳定。
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 先确认外接硬盘已挂载且可写:
ls -l /Volumes/,找到对应卷名(如BackupDisk),再检查写权限:touch /Volumes/BackupDisk/test && rm /Volumes/BackupDisk/test - 在用户主目录下创建中转目录:
mkdir -p ~/navicat-external-backup - 删除原有符号链接(如有):
rm ~/navicat-external-backup,然后重建:ln -s "/Volumes/BackupDisk/NavicatBackups" ~/navicat-external-backup - 在 Navicat 中右键连接 →「编辑连接」→「高级」→「设置位置」→ 填入
~/navicat-external-backup(注意:必须用波浪线~,不能用$HOME或绝对路径)
配套脚本确保挂载后再执行备份
即使用了符号链接,如果外接硬盘没插上就启动 Navicat 并触发备份,仍会失败。必须用外部脚本控制执行时机,而不是依赖 Navicat 自带的「计划任务」(macOS 版根本没这个功能)。
- 写一个 shell 脚本
run_backup.sh,开头加挂载检测:if [ ! -d "/Volumes/BackupDisk" ]; then echo "Disk not mounted"; exit 1; fi - 调用 Navicat CLI(需提前启用)或更稳妥地导出为
mysqldump/pg_dump命令,输出路径设为~/navicat-external-backup/$(date +%Y%m%d_%H%M).sql - 用
launchd替代 cron:创建~/Library/LaunchAgents/com.navicat.backup.plist,在StartCalendarInterval中设定时,并加入RunAtLoad和KeepAlive防止因挂载延迟错过首次执行 - 脚本末尾加清理逻辑:
find ~/navicat-external-backup -name "*.sql" -mtime +7 -delete,避免外接硬盘塞满
真正关键的不是“怎么选路径”,而是让备份动作和外接硬盘的物理状态解耦——符号链接提供路径一致性,launchd 提供挂载感知,脚本提供兜底校验。漏掉任意一环,都可能在某次重启后发现备份全停了,而 Navicat 界面毫无异常提示。










