HeidiSQL 连接 MySQL 报错 10061

遇到 HeidiSQL 连接 MySQL 报错 10061 (Connection refused)时,通常与 网络配置、MySQL 服务状态或权限设置 有关。以下是详细的排查和解决方案:


一、错误原因分析

错误 10061 表示客户端(HeidiSQL)无法与 MySQL 服务器建立连接,常见原因包括:

  1. MySQL 服务未运行
  2. MySQL 未监听指定的 IP 或端口
  3. 防火墙/安全组阻止连接
  4. 用户权限未允许远程访问
  5. HeidiSQL 配置错误(如主机名、端口、用户或密码不正确)。

二、解决方案

步骤 1:确认 MySQL 服务是否运行
bash 复制代码
# Linux
sudo systemctl status mysql  # 检查服务状态
sudo systemctl start mysql   # 若未运行,启动服务

# Windows
通过服务管理器检查 MySQL 服务状态,或在命令行运行:
net start mysql

步骤 2:检查 MySQL 监听的地址和端口
  1. 查看 MySQL 监听的 IP 和端口

    bash 复制代码
    # Linux
    ss -tuln | grep 3306  # 默认端口 3306
    # 或
    netstat -tulnp | grep mysql
    
    # Windows
    netstat -ano | findstr :3306
  2. 常见问题

    • 如果输出显示 127.0.0.1:3306,则 MySQL 仅监听本地连接。
    • 如果显示 0.0.0.0:3306,则允许所有 IP 连接。
  3. 修改 MySQL 配置文件(若需允许远程连接):

    ini 复制代码
    # 编辑 MySQL 配置文件(路径如 /etc/mysql/my.cnf 或 /etc/my.cnf)
    [mysqld]
    bind-address = 0.0.0.0  # 允许所有 IP 连接(注意安全性)
    # 或指定具体 IP,如 bind-address = 192.168.1.100
  4. 重启 MySQL 生效配置

    bash 复制代码
    sudo systemctl restart mysql

步骤 3:检查防火墙/安全组
  1. 临时关闭防火墙测试(仅限测试环境):

    bash 复制代码
    # Ubuntu/Debian
    sudo ufw disable
    
    # CentOS/RHEL
    sudo systemctl stop firewalld
    
    # Windows
    暂时关闭 Windows 防火墙
  2. 若需保留防火墙,开放 3306 端口

    bash 复制代码
    # Ubuntu/Debian
    sudo ufw allow 3306/tcp
    
    # CentOS/RHEL
    sudo firewall-cmd --permanent --add-port=3306/tcp
    sudo firewall-cmd --reload
    
    # 云平台(如 AWS/Azure):
    确保安全组允许入站流量到 3306 端口

步骤 4:确保用户有远程访问权限
  1. 登录 MySQL 并检查用户权限

    bash 复制代码
    mysql -u root -p
  2. 创建或修改允许远程访问的用户

    sql 复制代码
    -- 示例:创建允许从任意 IP 连接的用户
    CREATE USER 'remote_user'@'%' IDENTIFIED BY '密码';
    GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

    注意 :避免直接使用 root 用户远程登录,建议创建专用用户。


步骤 5:验证网络连通性

从 HeidiSQL 所在的客户端机器测试到 MySQL 服务器的端口连通性:

bash 复制代码
telnet 服务器IP 3306  # 若成功,会显示空白;若失败,说明连接被阻断

步骤 6:检查 HeidiSQL 配置
  1. 确保配置正确

    • 主机名/IP :填写 MySQL 服务器的 IP 地址(而非 localhost,除非是本地连接)。
    • 端口 :默认 3306,若修改过需对应。
    • 用户名和密码:确保与 MySQL 中的用户匹配。
  2. 示例配置


步骤 7:尝试本地连接测试

如果问题仅出现在远程连接,尝试通过本地连接验证 MySQL 是否正常:

bash 复制代码
mysql -u 用户名 -p -h 127.0.0.1  # 使用 IP 而非 localhost

三、常见场景处理

场景 1:本地连接失败
  • 可能原因root@localhost 使用了 auth_socket 插件(无需密码)。

  • 解决方法

    sql 复制代码
    -- 切换为密码认证
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
    FLUSH PRIVILEGES;
场景 2:远程连接被拒绝
  • 可能原因:MySQL 默认禁止远程 root 登录。

  • 解决方法

    sql 复制代码
    CREATE USER 'remote_user'@'%' IDENTIFIED BY '密码';
    GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;

四、验证连接

完成上述步骤后,在 HeidiSQL 中重新尝试连接:

  1. 打开 HeidiSQL,点击 新建会话
  2. 填写正确的 主机名/IP、端口、用户名和密码
  3. 点击 测试连接,确认是否成功。

五、总结

问题类型 解决方案
服务未运行 启动 MySQL 服务。
端口未监听 修改 bind-address 配置并重启服务。
防火墙阻止 开放 3306 端口或暂时关闭防火墙。
用户权限不足 创建允许远程访问的用户并授权。
HeidiSQL 配置错误 确保主机名/IP、端口、用户名和密码正确。

如果问题仍未解决,请提供以下信息以便进一步诊断:

  1. HeidiSQL 的连接配置截图(隐藏密码)。
  2. MySQL 服务状态和监听端口的输出。
  3. MySQL 用户权限查询结果(SELECT User, Host FROM mysql.user;)。
  4. 客户端到服务器的 telnetnc 测试结果。