navicat premium 17迁移本地数据库至阿里云rds需满足网络连通(开通外网地址+白名单放行真实公网ip)、权限(rds高权限账号)、协议兼容(mysql 8.0+支持caching_sha2_password)三大前提,缺一即导致连接失败或导入中断。
navicat premium 17 支持直接通过「数据传输」功能完成本地数据库到阿里云 rds 的迁移,但必须满足网络连通 + 权限 + 协议兼容三个前提;跳过任一环节都会卡在「测试连接失败」或「导入中断」。
确认 RDS 实例已开通外网地址且白名单放行
这是最常被忽略的第一步。RDS 默认关闭外网访问,即使你填对了 host 和 port,也会报错 Can't connect to MySQL server on 'xxx.rds.aliyuncs.com' (110) 或超时。
- 登录阿里云 RDS 控制台 → 找到目标实例 → 「基本信息」页点击「修改内外网地址」→ 开启「公网地址」(注意:会产生少量流量费用)
- 进入「白名单设置」→ 添加你的本地公网 IP(不是
192.168.x.x或127.0.0.1),可用curl ifconfig.me或百度搜“我的IP”确认 - 如使用公司网络,可能需添加整个 CIDR 段(如
112.64.100.0/24),或联系 IT 开放出口 NAT IP
用 Navicat Premium 17 新建两个连接:源与目标
不能复用同一个连接做传输;必须分别配置本地 MySQL 和 RDS MySQL 的独立连接,且都通过「测试连接」验证成功。
- 本地源库:选择「MySQL」类型,
host填127.0.0.1或内网 IP,port通常为3306,账号需有SELECT权限 - RDS 目标库:选择「阿里云 > 阿里云 云数据库 MySQL 版」类型(图标更明确),
host填控制台显示的「公网连接地址」,port填对应「公网端口」(非内网端口),账号必须是已在 RDS「账号管理」中创建的高权限账号(如dbadmin),普通只读账号无法建表 - Navicat Premium 17 对 MySQL 8.0+ 的
caching_sha2_password认证支持良好,但若 RDS 实例为旧版(如 5.7),建议在连接高级选项中勾选「使用旧版认证协议」避免握手失败
执行数据传输时避开大表锁死和超时中断
Navicat 的「数据传输」默认单线程全量导出再导入,面对千万级单表极易触发 RDS 的 wait_timeout 或本地内存溢出,表现为你在进度条 92% 卡住、最后报 Lost connection to MySQL server during query。
- 务必在「数据传输」向导第三步「选项」中启用「分批导出」:勾选「每 X 行提交一次」,建议设为
10000;同时勾选「插入前清空目标表」(如需覆盖) - 禁用「导出结构」+「导出数据」分离操作——不要先导结构再导数据,Navicat 在结构导入阶段可能因字符集不一致(如本地
utf8mb4vs RDSutf8)导致建表失败;应统一勾选「结构和数据」并指定目标字符集为utf8mb4 - 如源库含 BLOB/TEXT 大字段,勾选「使用 INSERT DELAYED」无效(MySQL 8.0 已移除),改用「使用 LOAD DATA INFILE」——但这要求 RDS 开启
local_infile=ON(阿里云默认关闭,不建议开启;稳妥做法是改用「SQL 文件」中转)
更稳的替代路径:导出 SQL 文件 + 内网中转(适合 >5GB 场景)
当数据量超过 5GB 或网络不稳定时,Navicat 直传成功率急剧下降;此时应放弃「数据传输」按钮,改走「导出为 SQL 文件 → 上传至同地域 ECS → 用 mysql 客户端内网导入」流程。
- 在 Navicat 中右键本地库 →「转储 SQL 文件」→「结构和数据」→ 勾选「每 X 行写入一个 INSERT」(
1000较稳妥),生成local_db_20260604.sql - 将该文件上传至与 RDS 同地域、同 VPC 的 ECS(如华东1),确保 ECS 安全组允许访问 RDS 内网端口
- 在 ECS 上执行:
mysql -h rds-xxx.mysql.rds.aliyuncs.com -P 3306 -u dbadmin -p —— 此方式走内网,不产生外网流量费,且可配合 <code>pv或split分片控制节奏
真正容易被忽略的是:RDS 的 max_allowed_packet 默认仅 4MB,而 Navicat 导出的单条 INSERT 可能远超此值,导致导入中途报错 Packets larger than max_allowed_packet are not allowed;必须提前在 RDS 参数模板中调高该值(建议设为 512M),并重启生效。











