navicat连接mycat默认端口为8066,用户名密码来自server.xml中user配置,逻辑库名需与schemas值严格一致;填错端口或凭据将导致connection refused或access denied错误。
navicat 连接的是 mycat(或类似中间件)暴露的统一地址,不是直接连 mysql 主库或从库;只要 mycat 启动正常、配置无误,navicat 就像连普通 mysql 一样操作 —— 但背后流量会按规则分发到主从节点。
Navicat 连接 Mycat 地址时端口填什么
默认是 8066,不是 MySQL 的 3306。Mycat2 启动后监听的是这个端口(server.xml 中 port 配置项决定),而 3306 仍留给真实 MySQL 实例用。如果改过配置,得去 /usr/local/mycat/conf/server.xml 查 <property name="port">8066</property> 的实际值。
- 填错端口最常见现象:Navicat “测试连接” 显示
Connection refused或超时 - Mycat 没启动也会报同样错误,先执行
./mycat status确认状态 - 防火墙必须放行
8066(不是3306),CentOS 可用firewall-cmd --add-port=8066/tcp --permanent
用户名密码填 Mycat 的,不是 MySQL 的
Navicat 登录凭据来自 Mycat 的 server.xml,不是你给 MySQL 创建的 root@'%' 账号。例如配置里写的是:
<user name="myapp"><property name="password">123456</property><property name="schemas">mydb1</property></user>
那 Navicat 就填用户名 myapp、密码 123456、数据库名 mydb1。填错会导致 Access denied for user 'xxx'@'xxx' 错误 —— 注意这个错误来源是 Mycat,不是 MySQL。
-
schemas值必须和逻辑库名完全一致,且该逻辑库需已通过 SQL 或配置文件创建(如create database mydb1) - 如果 Mycat 启动时报
schema not found,说明mydb1.schema.json缺失或targetName指向的集群不存在 - 密码加密方式不匹配也会失败:MySQL 8.0 默认用
caching_sha2_password,但 Mycat2 目前只支持mysql_native_password,建用户时要显式指定
读写分离效果怎么验证
不能只看 Navicat 是否连上,得用实际 SQL 触发路由行为。最直接的方法是开两个查询窗口,分别执行:
/* 写操作,强制走主库 */ INSERT INTO test_table (id, name) VALUES (1, 'test'); <p>/<em> 读操作,理论上走从库(但可能被缓存或负载策略影响) </em>/ SELECT * FROM test_table WHERE id = 1;</p>
然后去各 MySQL 节点的 general_log 或慢日志里查执行记录,确认 SQL 真实落在哪台机器。注意:
-
SELECT不一定每次都走从库:若事务未提交、SQL 带FOR UPDATE、或用了@@tx_isolation等会话变量,Mycat 可能将其路由到写节点 - balance 参数决定读流量分配逻辑:
balance="3"才严格只发给readHost;balance="1"会让备用写节点也参与读 - 从库延迟高时,Mycat 默认不自动剔除节点,需靠
slaveThreshold和心跳检测配合判断
真正容易被忽略的点是:Mycat 的 schema 名、targetName、物理库名三者必须严格一致,差一个字母或大小写,整个读写分离链路就静默失效 —— Navicat 能连上、能建表、甚至能插入,但读请求永远只打到主库。











