下面我将以国内主流的云服务商(如阿里云、腾讯云、华为云)为例,详细解释访问的步骤、原理和最佳实践。
云数据库(如RDS)通常默认处于一个独立的、受保护的私有网络中,云主机(如ECS)要能访问它,必须满足两个条件:
1、网络连通性:云主机和云数据库必须在同一个网络中,或者网络之间可以互通。
2、访问授权:云数据库必须允许来自该云主机的IP地址或安全组的连接请求。
整个配置过程可以分为云数据库端和云主机端两大部分。
这是最关键的一步,决定了谁可以访问数据库。
1. 获取数据库的连接信息
在云数据库的管理控制台中,找到以下关键信息:
内网地址/Endpoint这是最重要的地址。强烈建议使用内网地址进行访问,因为内网流量是免费的,且速度更快、延迟更低。
端口号例如MySQL通常是3306,Redis是6379。
数据库名你创建的具体数据库名称。
用户名/密码访问数据库的账号和密码。
2. 配置数据库的“白名单”(或“安全组”)
这是实现访问控制的核心设置,白名单决定了哪些IP地址可以被允许连接到数据库。
找到白名单设置在云数据库的管理页面上,通常有“白名单与安全组”、“数据安全性”或“网络设置”等选项。
添加云主机的IP地址
最佳实践使用安全组ID(如果云商支持),你可以将云主机所属的安全组ID直接添加到数据库的白名单中,这样做的好处是,未来你向这个安全组里添加新的云主机,它们会自动获得访问数据库的权限,无需再修改白名单。
备选方案填写云主机的内网IP地址,你可以将云主机的内网IP(如172.16.0.12
)添加到白名单,如果云主机有多个,需要逐个添加。
临时方案填写公网IP(不推荐用于生产环境),如果你的云主机有公网IP,并且数据库也开启了公网访问功能(通常需要额外申请),你可以将云主机的公网IP加入白名单。这种方法会暴露数据库到公网,有安全风险,仅建议用于测试。
常见的设置格式:
单个IP172.16.0.12
IP段172.16.0.0/24
(表示允许172.16.0.1到172.16.0.254的所有IP)
安全组IDsg-xxxxxxxxx
在确保网络和权限都已配置好后,你可以在云主机上进行连接测试。
1. 安装数据库客户端工具
根据你要连接的数据库类型,在云主机上安装相应的客户端。
连接MySQL:
# Ubuntu/Debian sudo apt-get update sudo apt-get install mysql-client # CentOS/RHEL sudo yum install mysql
连接命令:
mysql -h <数据库内网地址> -P <端口号> -u <用户名> -p # 示例: mysql -h rm-xxx.mysql.rds.aliyuncs.com -P 3306 -u myuser -p # 然后会提示你输入密码
连接Redis:
# Ubuntu/Debian sudo apt-get install redis-tools # CentOS/RHEL sudo yum install redis
连接命令:
redis-cli -h <Redis内网地址> -p <端口号> -a <密码> # 示例: redis-cli -h r-xxx.redis.rds.aliyuncs.com -p 6379 -a yourpassword
2. 在应用程序中配置
在你的应用程序(如PHP、Python、Java Web应用)的配置文件(如config.py
,application.properties
)中,将数据库连接地址修改为云数据库的内网地址。
示例(Python Flask + SQLAlchemy):
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@rm-xxx.mysql.rds.aliyuncs.com:3306/your_database_name'
方案 | 配置方法 | 优点 | 缺点 | 适用场景 |
内网访问(推荐) | 云主机和云数据库在同一地域的同一VPC内,使用数据库的内网地址,并将云主机的内网IP或安全组加入数据库白名单。 | 高速、免费、安全(流量不经过公网) | 要求云主机和数据库在同一个VPC内 | 所有生产环境 |
公网访问 | 为数据库申请公网地址,将云主机的公网IP加入数据库白名单。 | 配置简单,不受VPC限制 | 有安全风险、产生公网流量费用、速度慢、延迟高 | 临时测试、开发调试 |
1、错误: “ERROR 1130 (HY000): Host ‘X.X.X.X’ is not allowed to connect to this MySQL server”
原因云主机的IP地址不在数据库的白名单中。
解决检查云主机的内网/公网IP,并正确添加到数据库的白名单。
2、错误: “ERROR 2003 (HY000): Can’t connect to MySQL server on ‘X.X.X.X’ (110)”
原因网络不通。
解决
* 确认使用的是内网地址,且云主机和数据库在同一地域和同一VPC。
* 检查云主机的安全组规则,是否放行了出方向(Outbound)到数据库端口(如3306)的请求。
* 检查数据库的安全组(如果有)或网络ACL规则,是否放行了入方向(Inbound)来自云主机的请求。
3、错误: “ERROR 1045 (28000): Access denied for user ‘user’@’X.X.X.X’ (using password: YES)”
原因用户名或密码错误。
解决仔细核对数据库的用户名和密码。
始终使用内网访问这是最重要的原则。
使用安全组进行授权比使用IP地址更灵活、更易于管理。
定期更换密码增强数据库安全性。
生产环境禁用公网访问如果不需要,绝不开启数据库的公网入口。
按照以上步骤,你应该可以顺利地让云主机访问到云数据库,如果遇到问题,请首先关注白名单和安全组的配置,这是最常见的原因。
文章摘自:https://idc.huochengrm.cn/zj/16400.html
评论
揭俊远
回复云主机访问云数据库,通常通过云服务提供商提供的数据库访问服务,如使用数据库连接字符串、API接口或专用网络连接,确保数据传输安全高效。