You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置MySQL允许外部连接?配置后MySQL Workbench连接失败求助

解决MySQL远程连接10060超时错误

我帮你一步步排查这个Failed to Connect to MySQL... (10060) 错误——这本质是连接超时,说明你的请求根本没抵达MySQL服务,大概率是网络拦截或配置未生效导致的,咱们逐个排查:

  • 确认bind-address配置生效
    你修改了my.cnfbind-address后,必须重启MySQL服务才能让配置生效。执行以下命令重启服务:

    # 针对systemd系统(如Ubuntu 16.04+、CentOS 7+)
    sudo systemctl restart mysql
    # 针对旧版init系统
    sudo service mysql restart
    

    重启后,登录MySQL本地控制台,验证生效的绑定地址是否正确:

    SHOW VARIABLES LIKE 'bind_address';
    

    注意:如果你的客户端IP是动态变化的,或者想允许所有IP连接,应该把bind-address设为0.0.0.0,而不是单个指定IP(否则只有该IP能访问)。

  • 检查防火墙/安全组是否拦截3306端口
    这是最常见的元凶!

    1. 服务器本地防火墙:比如用ufw的话,执行以下命令开放3306端口:
      sudo ufw allow 3306/tcp
      sudo ufw reload
      
      如果是iptables,执行:
      sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
      sudo service iptables save
      
    2. 云服务器安全组:如果你用的是阿里云、AWS、腾讯云等,必须在控制台的安全组规则里添加入站规则,允许你的客户端IP(或所有IP)访问3306端口(TCP协议)。
      可以在客户端用telnet测试端口是否可达:
    telnet 你的服务器IP 3306
    

    如果提示“无法打开连接”,直接先搞定防火墙/安全组。

  • 验证root账号的授权范围
    你说给root授予了全部权限,要确认授权的IP范围是否正确。登录MySQL本地控制台,执行:

    SELECT user, host FROM mysql.user WHERE user='root';
    

    查看host字段:如果是指定的客户端IP,要确保你当前的客户端公网IP和这个值完全一致;如果是%则代表允许所有IP连接。如果授权不对,重新执行授权命令:

    -- 允许指定IP连接
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'你的客户端IP' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
    -- 允许所有IP连接(测试用,生产建议限制IP)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
    -- 刷新权限
    FLUSH PRIVILEGES;
    
  • 确认MySQL服务正常运行
    在服务器本地检查服务状态:

    sudo systemctl status mysql
    

    确保服务处于active (running)状态,如果未运行,先启动服务:

    sudo systemctl start mysql
    
  • 排查网络路由问题
    如果是跨公网连接,先确认服务器有公网IP,并且客户端能正常访问该IP(可以尝试ping服务器IP,部分服务器禁ping,所以ping不通也不用慌,但telnet 3306必须能通)。如果服务器在内网,需要做端口映射或者直接用内网IP连接。

内容的提问来源于stack exchange,提问作者user2462353

火山引擎 最新活动