Mysql数据库连接被拒绝

时间:2017-06-01 20:10:28

标签: php mysql amazon-ec2

我正在尝试让我的Symfony 3应用在Amazon EC2实例上以生产模式运行。

我将代码放在正确的位置,然后尝试通过运行

来设置与composer的任何依赖关系
export SYMFONY_ENV=prod
composer install --no-dev --optimize-autoloader

但得到错误

> Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::installAssets

[Doctrine\DBAL\Exception\ConnectionException]
An exception occured in driverL SQLSTATE[HY000] [1044] Access denied for user 'my-user'@'127.0.0.1' to database 'my_database'

然后在脚本终止之前将此错误传递给[Doctrine\DBAL\Driver\PDOException][PDOException]。 然后是消息

[RuntimeException]
An error occured when executing the "'assets:install --symlink --rela'\''web'\'''" command:

然后是与开头时相同的错误。

我的parameters.yml文件是

parameters:
    database_host: 127.0.0.1
    database_port: 3306
    database_name: my_database
    database_user: my-user
    database_password: mypassword
    server_version: 5.6
    mailer_transport: smtp
    mailer_host: 127.0.0.1
    mailer_user: null
    mailer_password: null
    secret: Mysecret
    registration_permitted: true
    registration_limit: 3

并且用户my-user拥有数据库my_database的所有权限,但GRANT除外。

我一直试图解决这个问题几个小时无济于事,我遇到的其他解决方案涉及拼错用户名/密码/数据库(三重检查)或者需要添加服务器版本(它没有制作一个差)。

其他信息

  • 运行mysql -u my-user -p提示输入密码,然后允许我登录。
  • 运行mysql -u my-user -p -D my_database提示输入密码,然后返回ERROR 1044 (42000): Access denied for user 'my-user'@'localhost' to database 'my_database'
  • 以root身份登录mysql并运行SHOW GRANTS FOR 'my-user';会返回ERROR 1141 (42000): There is no such grant defined for user 'my-user' on host '%'
  • 以root身份登录mysql并运行SHOW GRANTS FOR 'my-user'@'localhost';会返回GRANT USAGE ON *.* TO 'my-user'@'localhost' IDENTIFIED BY PASSWORD hashedPassword

其他信息2 删除my-user'my-user'@'localhost''my-user'@'127.0.0.1'),然后使用GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'localhost' IDENTIFIED BY 'password';GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'127.0.0.1' IDENTIFIED BY 'password';以及FLUSH PRIVILEGES;重新创建SHOW GRANTS FOR 'my-user'@'localhost'的输出然后是

GRANT USAGE ON *.* TO 'my-user'@'localhost' IDENTIFIED BY PASSWORD 'passwordHash'
GRANT ALL PRIVILEGES ON 'my_database' TO 'my-user'@'localhost'

'my-user'@'127.0.0.1'的类似输出。

但这仍然给我带来与以前相同的错误,还有更多的想法吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的那样,您对数据库没有任何特权。 所以运行它可以解决您的问题:

GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'localhost'

关于你怀疑为什么你必须在你的params中将它更改为localhost因为那就是你告诉mysql 想象一下,您希望将数据库访问权限仅限于您可以运行的网络中的特定IP

GRANT ALL PRIVILEGES ON my_database.* TO 'my-user'@'192.168.1.10'

所以将192.168.1.10替换为127.0.0.1,你可以在参数中使用127.0.0.1