You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用R脚本连接Ubuntu系统MySQL服务器失败

解决RStudio连接Ubuntu MySQL失败的问题

从你的描述来看,Windows防火墙确实是最可能的元凶,不过咱们可以一步步排查确认,同时也覆盖其他容易忽略的小问题:

1. 先验证Windows防火墙是否拦截了3306端口

你可以先临时关闭Windows防火墙做个测试:

  • 打开「Windows Defender防火墙」→ 「启用或关闭Windows Defender防火墙」
  • 把私有和公用网络的防火墙都临时关闭,然后再执行telnet x.x.x.x 3306测试连接
    如果这次能连上了,那百分百是防火墙的问题,接下来要给3306端口添加放行规则:
  • 回到防火墙设置,点击「高级设置」→ 「入站规则」→ 「新建规则」
  • 选择「端口」→ 下一步,输入「3306」,选择「TCP」协议
  • 选择「允许连接」→ 勾选对应网络类型(根据你的实际使用环境调整)→ 给规则起个好记的名字(比如「MySQL 3306端口远程访问」)
  • 别忘了同步设置「出站规则」,确保Windows能主动发起3306端口的连接请求

2. 确认Ubuntu端的MySQL是否允许远程连接

虽然你能通过Putty登录Ubuntu,但MySQL默认只允许本地连接,这也会导致外部连不上:

  • 用Putty登录Ubuntu,打开MySQL配置文件(通常路径是/etc/mysql/mysql.conf.d/mysqld.cnf)
  • 找到bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者直接改成你Windows机器的具体IP
  • 重启MySQL服务生效:sudo systemctl restart mysql
  • 还要确认你的MySQL用户有远程访问权限:
    登录MySQL:mysql -u root -p
    执行权限授权命令:GRANT ALL ON *.* TO '你的MySQL用户名'@'你的Windows机器IP' IDENTIFIED BY '你的密码';
    刷新权限:FLUSH PRIVILEGES;

3. 检查Ubuntu本地防火墙是否拦截了3306端口

Ubuntu默认可能启用了ufw防火墙,也会挡住外部的连接请求:

  • 登录Ubuntu后,先检查ufw状态:sudo ufw status
  • 如果看到3306端口没有被允许,就添加放行规则:sudo ufw allow 3306/tcp
  • 重启ufw让规则生效:sudo ufw reload

4. 最后测试RStudio的连接

完成上面的步骤后,先通过telnet x.x.x.x 3306确认能正常连接,再用R脚本测试,比如用RMySQL包的示例代码:

library(RMySQL)
con <- dbConnect(MySQL(),
                 user = "你的MySQL用户名",
                 password = "你的MySQL密码",
                 dbname = "要连接的数据库名",
                 host = "x.x.x.x",
                 port = 3306)

如果还是报错,可以把具体的错误信息贴出来,咱们再进一步排查。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:23:34