必须为主库和从库分别创建独立Navicat连接,因Navicat不支持自动主从路由;主库用默认权限账号,从库连接须在“高级”页设置readOnly=true参数并启用SSH“保持连接活跃”,且Docker部署时需确保端口映射唯一、bind-address配置正确。
主库和从库必须分开建两个连接
navicat 本身不支持“自动路由到主/从”的集群抽象层,所有读写操作都由你手动指定目标实例。如果你只建一个连接,就等于把主从当成了单点,既无法利用从库分担查询压力,也埋下误写从库的风险。
- 每个实例(主库、每个从库)都要单独新建
MySQL连接,不能复用同一套参数 - 连接名建议带明确标识,比如
mysql-master-3306、mysql-slave1-3307 - 主库连接用默认权限用户(如
root或admin),从库连接建议用只读账号(如readonly_user) - 如果从库开启了
read_only=1,Navicat 执行INSERT或UPDATE会直接报错ERROR 1290 (HY000),这是保护机制,不是连不上
从库连接务必启用 readOnly=1 参数
即使 MySQL 层已设 read_only=1,Navicat 仍可能在某些操作(如拖拽建表、右键执行语句)中尝试写入。加这个参数是客户端侧的双重保险,能提前拦截误操作。
- 在 Navicat 新建连接 → “高级”选项卡 → 在
Connection Arguments栏填入:readOnly=true - 注意不是
read_only(那是 MySQL 配置项),Navicat 识别的是 JDBC 风格的readOnly - 若填错成
read_only=1,Navicat 不报错但参数不生效,写操作仍可能成功(取决于 MySQL 实际配置) - 该参数不影响
SELECT、SHOW、EXPLAIN等只读命令
SSH 隧道连云服务器时别漏掉“保持连接活跃”
主从节点常部署在云服务器或内网环境,用 SSH 隧道连接很常见。但默认 SSH 连接空闲 5–10 分钟就会断开,Navicat 却不会主动重连,导致后续查询卡住或报错 Lost connection to MySQL server during query。
- 在 Navicat 连接设置 → “SSH”选项卡 → 勾选
Keep the connection alive - 该选项本质是向 SSH 客户端发送
ServerAliveInterval心跳包,推荐值填60(秒) - 如果勾选后仍断连,检查服务器端
/etc/ssh/sshd_config是否允许客户端心跳:确认有ClientAliveInterval 60和ClientAliveCountMax 3 - 不要依赖 Navicat 的“自动重连”——它只对初始连接失败有效,对运行中中断无效
Docker 部署主从时注意宿主机端口映射与网络模式
用 Docker 搭主从,Navicat 连的不是容器 IP,而是宿主机上暴露的端口。一旦端口冲突或网络隔离,连的可能是另一个容器,甚至本机 MySQL。
- 主库容器启动时用
-p 3306:3306,从库必须换端口,比如-p 3307:3306,Navicat 连从库时主机填127.0.0.1,端口填3307 - 避免用
host网络模式——它会让所有容器共享宿主机网络栈,容易端口抢占;推荐bridge自定义网络 +--add-host显式绑定域名 - 如果 Navicat 报错
Can't connect to MySQL server on '127.0.0.1',先docker ps确认容器是否真在运行,再docker logs mysql-slave1看是否因复制线程异常退出 - 容器内 MySQL 的
bind-address必须是0.0.0.0或注释掉,否则只监听容器内部 loopback,宿主机无法访问
Seconds_Behind_Master,你得手动连上去查 SHOW SLAVE STATUS\G。别等线上查不到最新数据了才想起看同步状态。











