Doris连接故障一键排查脚本
以下是 Doris 连接故障排查一键脚本,涵盖「环境检查、FE 状态、端口连通、连接测试」全流程,输出清晰的排查结果和解决方案,支持 Linux 主流发行版(CentOS、Ubuntu 等),可直接在终端执行。
脚本功能
- 检查 MySQL 客户端是否安装(Doris 连接核心工具)
 - 检查 Doris FE 进程状态(是否存活)
 - 测试 FE 关键端口连通性(9030 查询端口、10010 JDBC 端口)
 - 模拟实际连接测试(用用户配置的账号密码尝试连接)
 - 汇总故障点 + 给出针对性解决方案
 
排查脚本(doris_conn_check.sh)
#!/bin/bash
set -euo pipefail# ==================== 配置参数(用户需根据实际环境修改)====================
FE_IP="192.168.1.100"          # Doris FE 节点IP(必填)
FE_QUERY_PORT="9030"           # FE 查询端口(默认9030)
FE_JDBC_PORT="10010"           # FE JDBC端口(默认10010)
DORIS_USER="root"              # Doris 登录用户名(默认root)
DORIS_PASS="123456"            # Doris 密码(为空则填"",如 DORIS_PASS="")
DORIS_DB="default"             # 要连接的数据库(默认default)
# ==========================================================================# 颜色定义(美化输出)
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
NC="\033[0m"  # 重置颜色# 故障汇总数组
ERRORS=()# ==================== 1. 环境检查:MySQL客户端是否安装 ====================
echo -e "\n${BLUE}=== 步骤1:检查 MySQL 客户端安装状态 ===${NC}"
if command -v mysql &> /dev/null; thenecho -e "${GREEN}[✅ 成功] MySQL 客户端已安装(版本:$(mysql --version | awk '{print $5}' | cut -d',' -f1))${NC}"
elseecho -e "${RED}[❌ 故障] MySQL 客户端未安装(Doris 依赖 MySQL 协议连接)${NC}"ERRORS+=("MySQL客户端未安装")# 自动判断系统包管理器,给出安装命令if command -v yum &> /dev/null; thenecho -e "${YELLOW}[解决方案] 执行:yum install -y mysql${NC}"elif command -v apt &> /dev/null; thenecho -e "${YELLOW}[解决方案] 执行:apt update && apt install -y mysql-client${NC}"elseecho -e "${YELLOW}[解决方案] 手动安装 MySQL 客户端(兼容 MySQL 5.7+ 版本)${NC}"fi
fi# ==================== 2. 检查 FE 进程状态(仅在 FE 节点执行有效)====================
echo -e "\n${BLUE}=== 步骤2:检查 Doris FE 进程状态 ===${NC}"
FE_PID=$(ps aux | grep -v grep | grep "doris_fe" | awk '{print $2}')
if [ -n "$FE_PID" ]; thenecho -e "${GREEN}[✅ 成功] FE 进程正在运行(PID:$FE_PID)${NC}"# 额外检查 FE 日志是否有异常(可选,需 FE 安装路径)FE_LOG_PATH="${DORIS_HOME:-/opt/doris/fe}/log/fe.log"if [ -f "$FE_LOG_PATH" ]; thenERROR_LOGS=$(tail -100 "$FE_LOG_PATH" | grep -i "error" | wc -l)if [ "$ERROR_LOGS" -gt 0 ]; thenecho -e "${YELLOW}[⚠️  警告] FE 日志中存在 $ERROR_LOGS 条错误记录,建议查看:tail -100 $FE_LOG_PATH${NC}"fifi
elseecho -e "${RED}[❌ 故障] FE 进程未启动(连接 Doris 核心依赖 FE 节点)${NC}"ERRORS+=("FE进程未启动")echo -e "${YELLOW}[解决方案] 1. 切换到 FE 安装目录;2. 执行:bin/start_fe.sh --daemon${NC}"
fi# ==================== 3. 测试 FE 端口连通性 ====================
echo -e "\n${BLUE}=== 步骤3:测试 FE 端口连通性 ===${NC}"
test_port() {local IP=$1local PORT=$2local PORT_NAME=$3if nc -zv "$IP" "$PORT" &> /dev/null; thenecho -e "${GREEN}[✅ 成功] $PORT_NAME($PORT 端口)连通正常${NC}"elseecho -e "${RED}[❌ 故障] $PORT_NAME($PORT 端口)无法连通${NC}"ERRORS+=("$PORT_NAME端口不通")echo -e "${YELLOW}[排查方向]${NC}"echo -e "  1. 确认 FE 配置文件(fe.conf)中 port_query=$PORT / jdbc_port=$PORT"echo -e "  2. 检查 FE 节点防火墙:firewall-cmd --list-ports | grep $PORT(CentOS)或 ufw status(Ubuntu)"echo -e "  3. 临时开放端口:firewall-cmd --add-port=$PORT/tcp --permanent && firewall-cmd --reload(CentOS)"fi
}# 测试核心端口(9030 是 MySQL 客户端连接端口,必测;10010 可选)
test_port "$FE_IP" "$FE_QUERY_PORT" "FE 查询端口"
test_port "$FE_IP" "$FE_JDBC_PORT" "FE JDBC 端口"# ==================== 4. 实际连接测试(模拟用户连接场景)====================
echo -e "\n${BLUE}=== 步骤4:模拟 Doris 连接测试 ===${NC}"
if [ -z "$(command -v mysql &> /dev/null && echo 1)" ]; thenecho -e "${YELLOW}[⚠️  跳过] MySQL 客户端未安装,无法执行连接测试${NC}"
else# 处理密码为空的情况(-p 后不加密码)if [ -z "$DORIS_PASS" ]; thenCONN_CMD="mysql -h $FE_IP -P $FE_QUERY_PORT -u $DORIS_USER -p -D $DORIS_DB -e 'select version();' 2>&1"elseCONN_CMD="mysql -h $FE_IP -P $FE_QUERY_PORT -u $DORIS_USER -p$DORIS_PASS -D $DORIS_DB -e 'select version();' 2>&1"fi# 执行连接测试CONN_RESULT=$(eval "$CONN_CMD")if echo "$CONN_RESULT" | grep -q "Doris"; thenecho -e "${GREEN}[✅ 成功] Doris 连接测试通过!${NC}"echo -e "${BLUE}[连接命令参考]${NC}:mysql -h $FE_IP -P $FE_QUERY_PORT -u $DORIS_USER -p -D $DORIS_DB"elseecho -e "${RED}[❌ 故障] Doris 连接失败(错误信息:$CONN_RESULT)${NC}"ERRORS+=("Doris连接失败")# 常见错误解决方案if echo "$CONN_RESULT" | grep -q "Access denied"; thenecho -e "${YELLOW}[解决方案] 1. 检查用户名/密码是否正确;2. 给用户授权:GRANT ALL ON $DORIS_DB.* TO '$DORIS_USER'@'%';${NC}"elif echo "$CONN_RESULT" | grep -q "Can't connect to MySQL server"; thenecho -e "${YELLOW}[解决方案] 参考步骤3,确认 FE 端口是否开放、FE 进程是否正常${NC}"elif echo "$CONN_RESULT" | grep -q "Unknown database"; thenecho -e "${YELLOW}[解决方案] 数据库 $DORIS_DB 不存在,执行:CREATE DATABASE IF NOT EXISTS $DORIS_DB;${NC}"fifi
fi# ==================== 5. 故障汇总 ====================
echo -e "\n${BLUE}=== 排查总结 ===${NC}"
if [ ${#ERRORS[@]} -eq 0 ]; thenecho -e "${GREEN}[🎉 全部正常] 未发现 Doris 连接相关故障,可直接使用连接命令操作!${NC}"
elseecho -e "${RED}[❌ 发现 ${#ERRORS[@]} 个故障]${NC}:${ERRORS[*]}"echo -e "${YELLOW}[建议] 按上述步骤逐一修复故障后,重新执行脚本验证${NC}"
fi
使用说明
1. 脚本准备
- 复制上述脚本内容,在 Linux 终端创建文件:
vi doris_conn_check.sh - 按 
i进入编辑模式,粘贴脚本,然后按Esc,输入:wq保存退出。 
2. 配置参数(关键!)
打开脚本,修改开头的 配置参数 为你的实际环境信息:
FE_IP="192.168.1.100"          # 你的 Doris FE 节点IP(比如 FE 所在机器的内网IP)
FE_QUERY_PORT="9030"           # 保持默认9030,若修改过 fe.conf 则对应修改
DORIS_USER="root"              # 你的 Doris 用户名(默认root)
DORIS_PASS="123456"            # 你的 Doris 密码(为空则填 DORIS_PASS="")
DORIS_DB="default"             # 要连接的数据库(默认default即可)
3. 执行脚本
- 给脚本添加执行权限
chmod +x doris_conn_check.sh - 运行脚本:
./doris_conn_check.sh 
脚本输出示例(故障场景)
=== 步骤1:检查 MySQL 客户端安装状态 ===
[✅ 成功] MySQL 客户端已安装(版本:8.0.36)=== 步骤2:检查 Doris FE 进程状态 ===
[❌ 故障] FE 进程未启动(连接 Doris 核心依赖 FE 节点)
[解决方案] 1. 切换到 FE 安装目录;2. 执行:bin/start_fe.sh --daemon=== 步骤3:测试 FE 端口连通性 ===
[❌ 故障] FE 查询端口(9030 端口)无法连通
[排查方向]1. 确认 FE 配置文件(fe.conf)中 port_query=90302. 检查 FE 节点防火墙:firewall-cmd --list-ports | grep 9030(CentOS)或 ufw status(Ubuntu)3. 临时开放端口:firewall-cmd --add-port=9030/tcp --permanent && firewall-cmd --reload(CentOS)
[✅ 成功] FE JDBC 端口(10010 端口)连通正常=== 步骤4:模拟 Doris 连接测试 ===
[❌ 故障] Doris 连接失败(错误信息:ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.100' (111))
[解决方案] 参考步骤3,确认 FE 端口是否开放、FE 进程是否正常=== 排查总结 ===
[❌ 发现 2 个故障]:FE进程未启动、FE 查询端口端口不通
[建议] 按上述步骤逐一修复故障后,重新执行脚本验证
常见故障修复优先级
- FE 进程未启动 → 先启动 FE(
bin/start_fe.sh --daemon) - MySQL 客户端未安装 → 按脚本提示安装(
yum/apt install mysql) - 9030 端口不通 → 关闭防火墙或开放端口(核心连接端口)
 - 用户名 / 密码错误 → 确认账号密码,或重置密码(
ALTER USER 'root'@'%' IDENTIFIED BY '新密码';) 
如果脚本执行后仍无法连接,可提供脚本输出日志,我帮你进一步定位问题!
