Navicat 同步失败常因 JVM 内存不足、目标库磁盘满或全表加载溢出;应调高 navicat.ini 中 -Xmx 至 1024m/2048m、检查目标服务器磁盘空间、改用 SQL 文件导出导入替代全表同步。
同步中途崩溃报“Out of Memory”或直接退出进程
navicat 同步失败时没弹明确错误,而是直接关闭窗口或卡死几秒后消失,大概率是 jvm 内存耗尽被系统强制 kill。它底层用 java(部分版本),navicat.ini 里默认的 -xmx512m 在处理大表(尤其含 blob/text 字段)时完全不够用。
实操建议:
- 找到 Navicat 安装目录下的
navicat.ini文件(Windows 通常在C:\Program Files\PremiumSoft\Navicat Premium\,macOS 在/Applications/Navicat Premium.app/Contents/Resources/) - 编辑该文件,把
-Xmx512m改成-Xmx1024m或-Xmx2048m(不超过你物理内存的 1/2) - 确保
-Xms值不低于256m,避免频繁 GC 拖慢同步节奏 - 改完保存,**必须彻底退出所有 Navicat 进程再重启**,否则配置不生效
同步前目标库磁盘满导致“no space left on device”
这个错误常被误判为 Navicat 本地内存问题,实际是目标数据库所在磁盘写满。Navicat 自己没报错,但同步卡在 INSERT 阶段、进度条不动、日志里反复出现 no space left on device。
实操建议:
- 别只查你电脑的 C 盘——登录目标服务器执行
df -h,重点看/var/lib/mysql或/var/lib/postgresql所在挂载点 - MySQL 用户优先清理 binlog:
PURGE BINARY LOGS BEFORE '2026-06-01 00:00:00';,别用RESET MASTER - PostgreSQL 用户检查
log_directory路径,删旧日志前先确认log_rotation_age已启用 - Docker 环境下运行
docker exec -it your-db-container df -h,扩容应挂载更大卷而非扩容器内根分区
同步时卡在“已处理字段”不动,内存占用持续飙升
这是典型的数据缓冲区溢出表现:Navicat 把整张表读进内存做对比,而不是流式分批处理。尤其当源表有千万级数据 + 多个 TEXT/BLOB 字段时,-Xmx2048m 都可能撑不住。
实操建议:
- 放弃“全表同步”,改用 SQL 导出 + 手动导入:右键表 →
备份表为 SQL 文件→ 用命令行mysql -u user -p db_name - 若必须用 Navicat 同步,提前在源库执行
SELECT COUNT(*) FROM table_name;,超过 50 万行就手动拆成多个 WHERE 条件分段同步 - 关闭 Navicat 的“结构+数据一起同步”选项,先同步结构,再单独同步数据(勾选“仅数据”)
- 临时禁用目标库的 binlog(
SET sql_log_bin = OFF;)和唯一性检查(SET unique_checks = 0;),同步完再恢复
Mac 上同步闪退伴随 Hardened Runtime 错误
Apple Silicon Mac 同步过程中突然退出,控制台日志里出现 Hardened Runtime violation 或 code signature invalid,说明不是内存问题,而是签名校验失败触发系统拦截。
实操建议:
- 终端执行:
sudo xattr -r -d com.apple.quarantine /Applications/Navicat\ Premium.app - 右键 App → 显示简介 → 确认「在 Rosetta 中打开」是否勾选:M1/M2/M3 原生版要**取消勾选**,Intel 版才需勾选
- 删掉三处缓存:
rm -f ~/Library/Preferences/com.prect.NavicatPremium.plist、rm -rf ~/Library/Caches/com.prect.NavicatPremium、rm -rf ~/Library/Application\ Support/PremiumSoft\ CyberTech/Navicat\ Premium - 用
file /Applications/Navicat\ Premium.app/Contents/MacOS/Navicat验证输出是否含arm64,不含就换 Apple Silicon 原生安装包











