Navicat还原卡在“正在执行”不动,主因是MySQL的max_allowed_packet过小导致服务端静默断连,需修改配置文件并重启服务,改用XML格式导出BLOB数据,并验证索引是否真实建立。
还原任务卡在“正在执行”不动,大概率是服务端静默断连
navicat 16 还原大 sql 文件时停在 99% 或无响应,不是客户端卡死,而是 mysql 主动关闭了连接——根本原因是 max_allowed_packet 太小,服务端收到超长 insert(尤其含 blob 或 mediumtext)后直接丢包,不报错、不提示,只留下 navicat 在空等响应。
- 先查当前值:
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';,若显示4194304(4MB)或16777216(16MB),基本就是瓶颈 -
SET GLOBAL max_allowed_packet = 268435456;仅临时生效,Navicat 新建连接不会继承,无效 - 必须改配置文件:
my.ini(Windows)或/etc/my.cnf(Linux/macOS),在[mysqld]下加一行:max_allowed_packet = 256M - 改完必须完整重启 MySQL 服务(非重载),否则不加载;重启前建议执行
FLUSH TABLES;
用 SQL 格式还原 Blob 数据,本质是自找麻烦
Navicat 默认导出/导入用 SQL 格式,对二进制字段极不友好:它把 BLOB 转成十六进制字符串(如 0x89504E47...),体积膨胀近一倍,且整条 INSERT 容易同时触发 net_buffer_length 和 max_allowed_packet 双重截断。
- 右键表 →「导出向导」→ 格式选
XML→ 勾选「使用 CDATA 包裹二进制数据」和「压缩导出文件」 - XML 模式将
BLOB作为独立节点处理,绕过 SQL 解析器,不受net_buffer_length限制 - 导出路径不能含中文、空格或特殊符号,否则 Navicat 可能读取失败
- 导出后用文本编辑器打开 XML 文件,确认
BLOB内容被包裹在中,而非十六进制字符串
计划任务里跑还原,常因凭据或路径失效静默退出
Navicat 16 自身无后台进程,所有定时还原都依赖 Windows Task Scheduler 以指定用户身份拉起 navicatcmd.exe。一旦凭据过期、路径错误或权限缺失,任务状态可能显示“已停止”,但事件查看器里几乎不留日志。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 先确认
Task Scheduler服务状态为「正在运行」,启动类型设为「自动(延迟启动)」 - 任务属性 →「常规」页 → 勾选「不管用户是否登录都要运行」,点击「更改用户或组…」填入完整账户名(如
DESKTOP-ABC\user),再输密码 - 「操作」页中:「程序或脚本」填绝对路径,如
"C:\Program Files\PremiumSoft\Navicat Premium 16\navicatcmd.exe";「起始于(可选)」必须填该目录,如C:\Program Files\PremiumSoft\Navicat Premium 16 - 参数示例:
--profile="MyDB" --task="RestoreProd",注意profile名不是连接名,而是连接属性「常规」页里的 Profile Name
还原后索引没建上,别信“已成功”,得手动验证
Navicat 还原对话框默认可能未勾选「索引」,或者你用的是 .nb3 备份格式(不含完整 DDL),结果表结构里只有列,没有索引——这不是“失效”,是压根没建。
- 执行
SHOW INDEX FROM table_name;,如果结果为空或仅有PRIMARY,说明索引确实缺失 - 检查备份 SQL 文件里是否含
CREATE INDEX或KEY语句;若无,需手写CREATE INDEX补上 - 避免用 Navicat 图形界面「设计表 → 索引」批量添加——它可能漏写
USING BTREE或大小写不匹配 - 加完索引后务必执行
ANALYZE TABLE table_name;,否则优化器统计信息过期,EXPLAIN仍会走全表扫描










