连接云主机数据库的本质是:一个客户端通过网络协议去访问一个服务器端的服务,需要确保三件事:
1、网络是通的:客户端能访问到云主机。
2、门是开的:云主机上的防火墙允许了数据库端口的连接。
3、钥匙是对的:你拥有正确的数据库用户名、密码和权限。
为了更直观地理解整个连接流程和各个环节的作用,您可以参考以下流程图:
flowchart TD A[开始: 连接云主机数据库] --> B{确认网络连通性} B -- 是 --> C{配置安全组/防火墙} B -- 否 --> D[<b>失败</b><br>检查网络设置或公网IP] C -- 已放通端口 --> E{配置数据库权限} C -- 未放通端口 --> F[<b>失败</b><br>添加规则放通3306等端口] E -- 已授权远程用户 --> G[使用客户端工具连接] E -- 仅限本地连接 --> H[<b>失败</b><br>创建远程用户并授权] G --> I[连接成功]
这些步骤通常在您第一次设置数据库时完成。
1、获取云主机的IP地址
公网IP从外网(本地电脑)连接时需要,在云服务商的控制台找到您的云服务器实例即可看到。
内网IP如果您的应用程序和数据库在同一云服务商、同一区域(Region)、同一虚拟私有云(VPC)内,使用内网IP连接速度更快、更安全(通常免费)。
2、安全组(防火墙)配置
这是最常见导致连接失败的原因!您必须在云服务器的安全组规则中“放行”数据库端口。
登录云服务商控制台 -> 找到您的云服务器实例 -> 进入安全组配置页面。
添加入站规则
类型自定义或选择“MySQL”、“Redis”等。
端口MySQL默认是3306
,PostgreSQL是5432
,Redis是6379
,MongoDB是27017
,请根据您的数据库类型填写。
源为了安全,不要开放给0.0.0.0/0
(全世界),如果您从本地连接,请填写您本地网络的公网IP地址(可以百度搜索“IP”查到),如果只是内网服务访问,填写内网网段,例如172.16.0.0/16
。
3、安装并配置数据库软件
以最常见的MySQL为例,在Linux云主机上
# 更新软件包列表 sudo apt update # 安装MySQL服务器 sudo apt install mysql-server # 运行安全安装向导,设置root密码等 sudo mysql_secure_installation
4、设置数据库远程访问权限
默认情况下,数据库可能只允许本地(localhost)连接,需要创建用户并授权。
登录到云主机,然后登录数据库
sudo mysql -u root -p
在MySQL命令行中执行以下命令(请将'your_username'
、'your_password'
和'your_local_ip'
替换为实际值)
-- 创建一个新用户(推荐,比直接使用root更安全) CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_strong_password!'; -- 授予该用户对所有数据库的所有权限(根据实际需要缩小权限范围) GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' WITH GRANT OPTION; -- 刷新权限使其生效 FLUSH PRIVILEGES;
注意'%'
表示允许从任何主机连接,出于安全考虑,在生产环境中,应该将其设置为具体的IP地址,例如'123.123.123.123'
。
您可以从客户端机器连接了。
1、使用命令行连接(本地电脑)
确保您的本地电脑安装了MySQL客户端
# 在Ubuntu/Debian上安装客户端 sudo apt install mysql-client # 在CentOS/RHEL上 sudo yum install mysql
使用以下命令连接
mysql -u your_username -p -h your_server_public_ip
-u
: 指定用户名
-p
: 提示输入密码
-h
: 指定云主机的公网IP地址
2、使用图形化工具连接(更推荐)
图形化工具(如MySQL Workbench, Navicat, DBeaver, phpMyAdmin)更直观易用。
以MySQL Workbench为例
1. 打开MySQL Workbench,点击“+”新建连接。
2.Connection Name: 取一个任意名字(如My Cloud DB
)。
3.Hostname: 填写云主机的公网IP地址。
4.Port:3306
(默认)。
5.Username: 填写你在上一步创建的数据库用户名(如your_username
)。
6. 点击“Store in Vault...”输入密码。
7. 点击“Test Connection”测试连接,如果配置正确,会提示成功。
8. 点击“OK”保存并连接。
其他工具(如Navicat、DBeaver)的连接方式类似,都是填写主机IP、端口、用户名和密码这四要素。
常见问题与排查(Connection Failed?)
如果连接失败,请按照以下顺序排查:
1、网络 ping 测试:
* 在本地电脑打开命令提示符(CMD),执行ping your_server_public_ip
。
* 如果ping不通,检查云主机是否开机、公网IP是否正确、本地网络是否有问题。
2、端口连通性测试:
使用telnet
命令测试端口是否开放telnet your_server_public_ip 3306
。
* 如果提示“无法打开连接”,99% 的问题出在安全组或云主机内部的防火墙上,请返回第一步,仔细检查安全组规则。
3、检查云主机内部的防火墙:
* 如果云主机系统自身的防火墙(如ufw
或firewalld
)是开启的,也需要放行端口。
Ubuntu (ufw):
sudo ufw allow 3306/tcp sudo ufw reload
CentOS (firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
4、检查数据库配置:
确认数据库是否监听公网IP而不是仅监听127.0.0.1
,配置文件通常是/etc/mysql/mysql.conf.d/mysqld.cnf
,找到bind-address
这一行,确保它是
bind-address = 0.0.0.0
修改后需要重启数据库服务:sudo systemctl restart mysql
5、检查数据库用户权限:
* 再次确认您是否用GRANT
命令为远程IP地址的用户赋予了权限。
强烈不建议 使用root账户进行远程连接,应为每个应用创建独立的、权限最小化的数据库用户。
尽可能使用内网连接如果客户端和数据库在同一云平台的内网中,使用内网IP地址连接,更安全、更快速。
限制访问源IP在安全组和数据库授权中,不要使用0.0.0.0/0
,只授权给需要连接的特定IP地址。
使用强密码。
考虑使用SSH隧道或VPN方式连接数据库,这样数据库端口本身可以不暴露在公网上,更加安全。
希望这个详细的指南能帮助您成功连接!
文章摘自:https://idc.huochengrm.cn/zj/13802.html
评论
屠家馨
回复云主机的数据库连接通常通过SSH或远程连接工具,使用相应的数据库客户端软件,输入正确的IP地址、端口、用户名和密码即可。