快速排查步骤:1.检查云主机数据库的安全组规则是否放行了你的本地IP或0.0.0.0/0;2.确认数据库绑定IP是0.0.0.0而不是127.0.0.1;3.验证用户名密码和端口正确;4.测试网络连通性用telnet云主机IP端口;5.检查防火墙设置;6.确保数据库服务已启动并监听远程连接。
原因一:安全组未开放端口
云服务器的安全组就像门卫,如果没有开放数据库端口(比如MySQL默认3306),本地就连不上。解决方案:登录云控制台,进入安全组配置,添加入站规则,放行3306端口,源IP填你的公网IP或0.0.0.0/0(注意安全风险)。
原因二:数据库未监听远程IP
MySQL默认只监听本地127.0.0.1,导致远程无法连接。解决:编辑my.cnf文件,设置bind-address=0.0.0.0,重启MySQL服务。然后用netstat -tlnp | grep 3306确认监听所有接口。
原因三:用户权限不足
数据库用户可能只允许本地登录。MySQL中执行:GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; 允许任意IP登录。
原因四:防火墙阻挡
云主机防火墙或本地防火墙挡住了。云主机上:firewall-cmd --zone=public --add-port=3306/tcp --permanent; firewall-cmd --reload。本地电脑关闭防火墙测试或添加例外。
原因五:网络问题
公网IP不对或网络不通。用ping云主机IP测试连通,telnet IP 3306测试端口。如果telnet失败,就是网络或端口问题。
原因六:阿里云/腾讯云特有问题
阿里云RDS默认只允许内网连接,需添加白名单:控制台-安全设置-IP白名单-添加你的公网IP。腾讯云CDB类似,检查访问控制列表。
FAQ
Q: telnet连接超时怎么办?
A: 检查安全组、防火墙和网络,确认IP端口正确。
Q: 已经开放安全组还是连不上?
A: 很可能数据库bind-address没改成0.0.0.0,重启服务试试。
Q: 用Navicat连不上显示Access denied?
A: 是用户权限问题,用root执行GRANT命令授权远程访问。
Q: 云数据库怎么查公网IP?
A: 控制台实例详情页有公网地址,直接复制用。