Laravel应用连接DigitalOcean托管DB报错SQLSTATE[HY000] [2002]求助
解决Laravel应用连接DigitalOcean托管数据库报错SQLSTATE[HY000] [2002]的问题
清除配置缓存
应用运行时可能加载了缓存的配置,而Tinker会实时读取.env文件,执行以下命令清除配置缓存并重启应用:php artisan config:clear修正SSL证书路径为绝对路径
配置中的MYSQL_ATTR_SSL_CA使用相对路径时,web服务器的运行目录可能与CLI不同,导致证书无法找到。将路径改为绝对路径,例如:MYSQL_ATTR_SSL_CA=/var/www/your-project/storage/cert/ca-certificate.crt或者利用Laravel的环境变量拼接绝对路径:
MYSQL_ATTR_SSL_CA=${APP_DIR}/storage/cert/ca-certificate.crt确保数据库配置文件正确映射SSL参数
打开config/database.php,检查mysql连接配置是否正确包含SSL选项:'mysql' => [ // 其他配置项... 'sslmode' => env('DB_SSLMODE', 'required'), 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],确保.env中的SSL配置被正确传入PDO连接参数。
检查web服务器的网络访问权限
CLI(Tinker)能正常连接,但web服务器进程可能没有访问DigitalOcean数据库端口25060的权限。执行以下命令测试web服务器用户的网络访问:sudo -u www-data telnet obilia-***.db.ondigitalocean.com 25060如果连接失败,需要调整服务器防火墙规则或SELinux策略,允许web服务器进程访问该端口。
验证数据库用户的IP访问权限
确认DigitalOcean托管数据库的信任列表中包含Laravel应用服务器的公网IP,即使Beekeeper能连接,也可能是因为Beekeeper所在IP已被授权,而应用服务器IP未在列表内。
内容的提问来源于stack exchange,提问作者rootShiv
相关产品推荐
相关产品推荐

