如何解决Digital Ocean应用平台Directus连接外部MySQL数据库失败问题?
在DigitalOcean应用平台连接Directus到外部MySQL数据库及排障指南
一、DigitalOcean应用平台上Directus连接外部MySQL的配置步骤
- 确认外部MySQL数据库的网络可达性:将DigitalOcean应用平台的出站IP添加到MySQL数据库的安全组白名单,同时确保MySQL用户允许从该IP段连接。
- 在DigitalOcean应用平台的Directus部署中配置以下核心环境变量:
DB_CLIENT=mysqlDB_HOST=<你的MySQL服务器IP/域名>DB_PORT=3306(默认端口,若修改过则填对应值)DB_DATABASE=<目标数据库名称>DB_USER=<数据库授权用户名>DB_PASSWORD=<数据库用户密码>- 若MySQL启用SSL,补充配置
DB_SSL=true;使用自签名证书时,需添加DB_SSL_CA=<证书文件内容>
- 触发Directus应用重新部署:在DO应用平台操作界面点击重新部署,让新的环境变量生效。
二、Docker部署Directus后无法连接数据库的排障步骤
- 核对环境变量准确性:进入Directus容器执行命令
printenv | grep DB_,检查所有数据库相关变量的拼写、值是否正确,注意密码中的特殊字符(如@、$)是否在DO平台正确转义。 - 测试网络连通性:在容器内执行
telnet <DB_HOST> <DB_PORT>或nc -zv <DB_HOST> <DB_PORT>,若连接失败,排查:- MySQL服务器的防火墙/安全组是否开放3306端口给DigitalOcean应用的出站IP
- 若为内网数据库,确认DO应用是否处于同一网络环境,或已通过专线/VPN打通网络
- 检查MySQL权限与状态:
- 登录MySQL服务器,执行
SELECT user, host FROM mysql.user;,确认所用用户允许从DO应用的IP连接(如user@'%'允许任意IP) - 执行
SHOW GRANTS FOR '<DB_USER>'@'<允许的IP>';,确认用户拥有目标数据库的全量操作权限(SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等) - 确认目标数据库已存在:执行
SHOW DATABASES LIKE '<DB_DATABASE>';
- 登录MySQL服务器,执行
- 排查SSL配置问题:
- 若启用了
DB_SSL=true,登录MySQL执行SHOW VARIABLES LIKE '%ssl%';确认SSL已开启 - 若使用自签名证书,需确保证书文件已挂载到Directus容器内,且
DB_SSL_CA指向容器内的证书路径
- 若启用了
- 查看Directus应用日志:在DO应用平台查看Directus的日志输出,搜索
connection、database关键词,根据具体错误信息定位(如Access denied对应权限问题,Timeout对应网络问题)
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

