【问题标题】:Laravel cannot connect to MySQL in Amazon RDS, but can connect from command lineLaravel 无法连接到 Amazon RDS 中的 MySQL,但可以从命令行连接
【发布时间】:2020-06-09 05:52:44
【问题描述】:

我正在开发在 AWS EC2(Ubuntu) 上托管的 Laravel 项目,并在同一个 VPC 上使用 RDS(MySQL)。 我可以通过命令行毫无问题地连接到 MySQL,但是当 Laravel 应用程序尝试连接到数据库时,访问被拒绝。

SQLSTATE[HY000] [1045] 拒绝用户访问 'username'@'ipaddress' (使用密码: Y ES) (SQL: select * from tablename)

下面是我在 .env 文件中的数据库配置:

DB_HOST=verylonghostname.rds.amazonaws.com  
DB_PORT=3306 
DB_DATABASE=dbname   
DB_USERNAME=dbusername 
DB_PASSWORD=dbpassword

可能是什么问题,我该如何解决?

【问题讨论】:

  • 当你说你可以通过命令行连接是当你SSH到EC2服务器时?它是否使用与 Laravel 尝试相同的用户名和密码?当您在命令行中连接时,您还可以从 Laravel 尝试的数据库中查询吗?
  • 如果 larvel 做了一个SELECT CURRENT_USER(),该答案的主机部分会包括您连接的 IP 地址范围吗?
  • @apokryfos 是的,我 ssh 到 ec2 服务器,然后使用与 laravel env 文件中相同的用户和密码连接到 rds。我也可以毫无问题地查询同一个数据库。

标签: php mysql laravel amazon-web-services amazon-rds


【解决方案1】:

我尝试为 laravel 创建另一个数据库用户,它可以工作! 如果我使用数据库用户名'admin',显然连接被拒绝。 也许这是 AWS 的一项安全措施。

【讨论】:

  • 我也有同样的问题。我已经在同一个 ec2 实例上安装了 phpmyadmin,并且能够通过 dbuser/dbpass 连接到我的 RDS 实例。但是我有 SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'ec2-xxx.xxx.xxx.xxx.compute-1.amazonaws.com' (使用密码: YES) (SQL: select * from users where email = myemail@domainame.tld 限制 1) 尝试通过 Laravel 应用程序连接时。显然它正在尝试连接到本地实例而不是 RDS 实例。有什么想法吗?
  • 当我使用 ssh 连接到 ec2 实例服务器时,我也能够连接到数据库
最近更新 更多