navicat 16 增量数据同步必须使用“数据同步”工具并手动配置 where 条件,如 created_at > '2026-04-20 00:00:00',该条件需在「表映射」页签中点击表右侧 options→勾选 use where condition 后输入,而非高级选项;不配置则执行全表比对与覆盖,易致重复插入或误删。

必须用“数据同步”工具,不能靠手动导出导入
Navicat 的数据同步(Data Synchronization)是专为跨库比对+增量同步设计的功能,不是简单复制粘贴或 SQL 导出。它会自动识别主键/唯一键,生成差异对比矩阵,并支持预览、过滤、忽略字段等操作。手动用 SELECT ... INTO OUTFILE 或导出 CSV 再导入,既无法处理 NULL/时区/字符集隐式转换,也无法做行级差异识别,极易丢数据或重复写入。
源库和目标库连接类型必须匹配实际协议与驱动
TiDB 和 MySQL 都要用 Navicat 内置的原生驱动,但选型不能混用:
- TiDB 源库:必须选
TiDB连接类型(Vendor Filter → 勾选 PingCAP → 双击 TiDB),否则元数据读取异常,表列表为空或字段注释丢失 - MySQL 目标库:必须选
MySQL连接类型(不能选 MariaDB 或通用 ODBC),且驱动版本建议 ≥ 8.0,避免caching_sha2_password认证失败 - 两者都需确保 SSL 配置正确:TiDB Cloud 强制 SSL,MySQL 若启用了
require_secure_transport,也必须勾选Use SSL并填入 CA 路径
同步前必须校验主键/唯一约束与字符集一致性
Navicat 同步依赖结构对齐,否则会跳过比对或报错 Cannot compare tables without primary key or unique key:
- 检查 TiDB 表是否含显式主键:
SHOW CREATE TABLE t1中确认有PRIMARY KEY;无主键表需先添加,或用tidb_enable_clustered_index = 1确保隐式聚簇索引生效 - MySQL 目标表必须有完全相同的主键定义(列名、顺序、类型),且不能是
TEXT或BLOB类型字段作主键 - 两端字符集建议统一为
utf8mb4,尤其注意 TiDB 的collation_server和 MySQL 的collation_database是否一致;不一致会导致中文比对误判为“不同” - 时间类型字段需确认时区行为:TiDB 默认使用系统时区,MySQL 若设为
SYSTEM且服务器时区不同,DATETIME字段可能显示偏移,建议统一用TIMESTAMP
执行同步时关键选项不能默认跳过
点击 Tools → Data Synchronization 后,在向导页中容易忽略以下三项:
-
Compare options里勾选Ignore column order:避免因 TiDB 和 MySQLSHOW COLUMNS返回顺序不一致导致整表标为“不一致” -
Synchronization options中启用Truncate target table before synchronization仅适用于首次全量初始化;日常增量务必禁用,改用Insert new records+Update existing records+Delete records not exist in source组合 -
Advanced标签页下设置Batch size:TiDB 对单事务写入行数敏感,默认 1000 容易触发ERROR 8028 (HY000): Transaction is too large,建议调低至 200–500
同步日志里若出现 Skipped due to unsupported data type,通常是 TiDB 的 TINYINT(1) 被当布尔映射,而 MySQL 目标列是 BOOLEAN 别名——此时需在同步映射中手动指定类型转换,或提前把 TiDB 列改为 BOOLEAN。











