从AWS RDS迁移至STRATO后无法Ping通MariaDB服务器,求连接方案及Heroku RoR连接串
解决STRATO MariaDB连接问题及Heroku RoR配置
为什么Ping不通?
你看到的目标IP 10.244.142.224 是私有内网IP,这类地址仅能在STRATO内部网络访问,外部网络(包括你的本地机器、Heroku服务器)无法通过ping直接连通,这是正常现象,不用纠结ping的结果,重点是用数据库客户端工具验证连接。
如何连接新数据库?
1. 确认STRATO数据库的外部访问设置
- 登录STRATO控制面板,找到数据库管理页面,检查是否开启了外部访问权限。通常需要手动添加允许访问的IP地址:
- 本地测试:添加你的公网IP
- Heroku应用:添加Heroku的出口IP段,或者使用Heroku固定IP插件(如Fixie)获取静态IP后添加
- 确认数据库的公网连接域名/IP:STRATO可能会提供专门的公网访问地址,而非你当前ping的内网域名,务必在后台确认正确的连接端点。
2. 本地测试连接(可选)
使用MariaDB官方客户端工具替代ping验证:
mysql -h <STRATO公网域名> -u <数据库用户名> -p
输入密码后如果能进入数据库命令行,说明连接正常。如果失败,检查:
- STRATO是否已将你的IP加入允许列表
- 本地防火墙是否放行3306端口(MariaDB默认端口)
Heroku RoR应用连接字符串配置
推荐方式:使用环境变量(符合Heroku最佳实践)
在Heroku控制台设置DATABASE_URL环境变量,格式如下:
heroku config:set DATABASE_URL="mysql2://<用户名>:<密码>@<STRATO公网域名>:3306/<数据库名>?sslmode=require"
注意:如果密码包含特殊字符(如
@、&、!),需要进行URL编码(例如@替换为%40,&替换为%26)
手动配置config/database.yml
如果需要在代码里配置,修改config/database.yml的production段:
production: adapter: mysql2 host: <STRATO公网域名> database: <你的数据库名称> username: <数据库用户名> password: <数据库密码> port: 3306 sslmode: require encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
同时确保Gemfile中包含mysql2 gem:
gem 'mysql2'
执行bundle install后重新部署到Heroku。
额外注意事项
- 确认STRATO数据库的端口是否为默认的3306,若有修改需同步到配置中
- 如果Heroku应用连接超时,检查STRATO的防火墙规则是否允许Heroku的IP访问,必要时联系STRATO客服确认
- 迁移数据前,确保STRATO数据库的字符集、排序规则与原AWS RDS一致,避免数据乱码问题
内容的提问来源于stack exchange,提问作者Leder
相关产品推荐
相关产品推荐

