TiDB查询TiFlash复制表报错ERROR 1105 (HY000)求助
针对你遇到的TiDB 6.5.0集群中,TiFlash副本状态显示available但查询时报错rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.18.78.60:3930: connect: connection refused"的问题,按以下步骤排查:
验证TiFlash节点3930端口监听状态
登录IP为172.18.78.60的TiFlash节点,执行ss -tulnp | grep 3930,确认端口是否处于LISTEN状态。如果无结果:- 检查TiFlash进程是否存活:
ps aux | grep tiflash,或者用systemd管理的话执行systemctl status tiflash。 - 查看TiFlash日志(默认路径
/tidb-deploy/tiflash-9000/log/tiflash.log),搜索listen或3930,排查是否有端口绑定失败(如端口被占用、权限不足)的报错。
- 检查TiFlash进程是否存活:
测试TiDB到TiFlash的端口连通性
登录任意TiDB节点,执行nc -zv 172.18.78.60 3930或telnet 172.18.78.60 3930,直接验证端口连通性。若不通:- 确认TiFlash节点的
tiflash.toml配置中,[tcp]段的listen_host是否设置为对外IP或0.0.0.0(如果绑定127.0.0.1,外部节点无法访问)。 - 检查节点间网卡配置和路由,确认处于同一子网且无异常路由规则。
- 确认TiFlash节点的
检查TiFlash节点的注册信息
执行SQL查询TiFlash节点的注册状态:SELECT * FROM information_schema.tiflash_nodes;确认返回的
address字段是TiFlash节点的正确IP和3930端口。如果地址错误,重启TiFlash节点让其重新向PD注册。验证TiFlash服务可用性
在TiFlash节点本地执行curl http://172.18.78.60:8123/status,检查HTTP服务是否正常响应。若响应异常,说明TiFlash服务未正常启动,需进一步排查日志中的启动报错。强制路由查询到TiFlash验证
使用显式指定TiFlash副本的查询语句测试:SELECT COUNT(*) FROM table1 USE INDEX(tiflash_replica) WHERE field = 'value';若仍报错,确认连接问题;若能正常执行,说明TiDB优化器未自动选择TiFlash副本,执行
ANALYZE TABLE table1;更新表统计信息后重试。
内容的提问来源于stack exchange,提问作者junglerider

