Navicat数据传输不支持跳过只读表,必须提前解除目标库read_only/super_read_only状态或手动取消勾选表;若无法解除只读,可改用结构同步+导入向导分步迁移。

数据传输不支持跳过只读表,必须提前解除只读或手动排除
Navicat 的「数据传输」功能本身没有“忽略只读表”的开关——它会在执行 CREATE TABLE 或 INSERT 时直接报错中断,错误信息通常是 ERROR 1290: The MySQL server is running with the --read-only option 或类似拒绝写入提示。它不会自动检测、绕过或跳过只读表,更不会把只读表从传输列表中过滤掉。
确认目标库只读状态并解除,否则传输必败
只读表往往源于整个目标库处于只读模式(read_only = 1),而非单表级设置。同步前必须验证并处理:
- 在 Navicat 连接的目标库中执行:
SELECT @@read_only;和SELECT @@super_read_only;,返回1即为只读 - 有 SUPER 权限:运行
SET GLOBAL read_only = OFF;和SET GLOBAL super_read_only = OFF;(如启用) - 无 SUPER 权限或使用云数据库(如阿里云 RDS):必须通过控制台关闭只读实例,或让 DBA 修改配置文件后重启 MySQL
- 别忽略客户端侧干扰:检查 Navicat 连接属性 → 「高级」页签底部是否勾选了
Read Only,该选项会强制加 hint,即使库可写也会失败
若仅需跳过某几张表(非因只读,而是业务原因),用“忽略对象”而非依赖权限
真正可控的“忽略”发生在「数据传输」向导第 3 步(对象选择页):
- 在左侧源库表列表中,**取消勾选**你不想传输的表(比如日志表、审计表、或已知只读且无需同步的归档表)
- 注意:这个操作是人工筛选,不是条件过滤;Navicat 不支持按
WHERE或表属性(如只读)自动排除 - 如果目标库某些表已存在且你只想跳过结构/数据覆盖,可在「高级」页签中取消勾选
Truncate target table before transfer和Drop and recreate target table - 误以为勾了「忽略错误」就能跳过只读表?不行——该选项只在「导入向导」中存在,对「数据传输」完全无效
只读表无法绕过,但可换路径规避:用结构同步 + 手动补数据
当目标库确实无法解除只读(如生产从库严格管控),又必须迁移部分表,可行折中方案是:
- 先用「工具 → 结构同步」把表结构同步过去(DDL 不触发只读限制,只要用户有
CREATE权限) - 再用「导入向导」将源表导出为 CSV,导入到目标库对应表中——前提是目标表已建好,且导入模式选「追加」+ 勾选「忽略重复项」(需主键/唯一索引支撑)
- 注意:此法绕不开 INSERT 权限检查,仍需确保目标用户有
INSERT,且表未被LOCK TABLES ... READ锁死
最易被忽略的一点:Navicat 从不缓存或重试只读状态判断。哪怕你刚在命令行关掉 read_only,也必须在 Navicat 中断开重连目标库,否则它仍沿用旧连接状态发起传输请求。


















