目标库为只读时navicat数据同步必然失败;需执行select @@read_only和select @@super_read_only确认状态,返回1即只读,解除须依权限用set global或修改配置文件重启,云数据库须通过控制台操作。
目标库设为只读时,navicat 数据同步必然失败,因为 insert/update/delete 全部被拒绝;必须先解除只读状态,不能靠 navicat 设置绕过。
怎么确认目标库是不是只读模式
在 Navicat 连接的目标库中执行:SELECT @@read_only;。返回 1 就是只读,0 才可写。别信连接图标或 Navicat 界面提示——它不主动检测该变量。另外,如果用的是 MySQL 从库(replica),还可能受 super_read_only = ON 影响,需一并查:SELECT @@super_read_only;。
解除只读的两种操作方式
方式取决于你是否有 SUPER 权限:
- 有 SUPER 权限:直接运行
SET GLOBAL read_only = OFF;和SET GLOBAL super_read_only = OFF;(如启用);该操作即时生效,无需重启 - 无 SUPER 权限:只能让 DBA 修改配置文件(如
my.cnf中删掉或注释read_only = 1),然后重启 MySQL;注意:Navicat 本身无法提权或绕过这个限制
特别注意:某些云数据库(如阿里云 RDS、腾讯云 CDB)禁用 SET GLOBAL,只允许通过控制台开关「只读实例」状态,此时必须走平台操作,不能连上就执行 SQL。
Navicat 同步前容易忽略的关键检查点
只读不是唯一拦路虎,但常和其它问题叠加导致误判:
- 确认 Navicat 连接用户本身有
INSERT、UPDATE、DELETE权限,而不仅是SELECT—— 只读模式开启后,权限检查会提前失败,错误信息却可能显示成“Access denied”而非“read_only” - 检查连接属性里是否勾选了
Read Only(MySQL 连接设置页底部),这个客户端侧开关会强制所有语句加/*+ READ_ONLY */hint,即使库本身可写也会报错 - 如果目标库是主从架构中的从库,且同步任务含 DDL(如
ALTER TABLE),即使read_only = OFF,也需确认replicate_do_db或binlog_format是否导致语句被跳过或重写
解除只读后,别急着点同步——先手动执行一条 INSERT INTO test_table VALUES (1); 验证写入能力,再进 Navicat 向导。很多“解除后仍失败”的情况,其实是权限没刷、连接没重连,或云平台策略延迟生效。











