跨网络同步mysql数据需确保navicat能稳定连接源库(远程)和目标库(本地或远程),关键在于连接可靠性、权限配置与字符集一致性;须测试连接、正确配置ip与用户host、启用保活心跳、校验字符集、手动勾选表及明确源/目标方向。
跨网络同步 mysql 数据,本质是让 navicat 能同时稳定连上源库(远程)和目标库(本地或另一远程),再通过 数据传输 或 数据同步 功能批量搬运。它不依赖内网直连,但对连接可靠性、权限配置和字符集一致性极其敏感——多数失败不是功能问题,而是连接或配置没到位。
远程库连不上?先确认三件事
很多人点开 数据传输 后库列表为空,根本原因是某个连接根本没通,Navicat 不报错,只沉默跳过。
- 右键远程连接 →
测试连接,必须看到绿色“连接成功”弹窗才算过关;本地连接同理(确认127.0.0.1或localhost对应的 MySQL 服务正在运行) - 远程库地址不能填
127.0.0.1或localhost(除非 Navicat 就装在数据库服务器上),必须填真实 IP,比如172.26.100.145 - MySQL 用户的
host字段必须是%或具体客户端 IP,不能仍是localhost;改完记得执行FLUSH PRIVILEGES
传输中途断连?保活设置不能省
Lost connection to MySQL server during query 这类错误,90% 是网络中间设备(防火墙、SLB)在 60 秒内没收到 TCP 包,主动断开了长连接。Navicat 默认不发心跳包。
- 对远程连接右键 →
编辑连接→ 切换到“高级”选项卡 - 勾选
保持连接活跃,设为每60秒发一次 ping(不可大于300) - 务必取消勾选
仅当有查询时发送ping,否则空闲阶段照样断连 - 本地连接一般无需开启此设置
结构不一致或字段乱码?别跳过字符集检查
Navicat 默认同步结构 + 数据,但如果远程库用的是 utf8mb4_unicode_ci,而本地库建表时用了 utf8_general_ci,轻则中文变问号,重则同步失败且无明确提示。
- 同步前,分别查两个库的默认字符集:
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'your_db'; - 确保源库和目标库的表级字符集一致(尤其
utf8mb4vsutf8) - 如果目标库表还不存在,勾选
同步结构时,Navicat 会按源库定义建表——此时若源库字符集不标准,目标库也会继承错误 - 已有表但结构不同,建议先手动
ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;再同步
同步后数据不对?重点盯紧源/目标方向和表勾选
界面看着简单,但源/目标一旦颠倒,可能把本地测试库清空成远程生产库的镜像;表没手动勾选,点击 下一步 会静默跳过,毫无提示。
-
数据传输窗口左上角的“源”下拉框,必须选中远程连接(如mysql-prod-remote),不是本地那个 -
源数据库和目标数据库下拉菜单都必须手动展开并点选具体库名,不能依赖默认值 - 表列表右侧有
全选/取消全选,但默认不勾选任何表——必须至少手动勾一个,否则流程中断 - 跨库同步慎用
结构 + 数据模式;若只是同步某几张表的数据,改用仅主键匹配,避免误删目标库已有索引或备注
真正麻烦的从来不是按钮在哪,而是连接状态是否真实有效、字符集是否肉眼难辨地不一致、以及那些没勾选却以为默认生效的表。这些点漏掉任何一个,同步就可能变成一场静默灾难。











