【问题标题】:mysql configuration: access denied error (1045)mysql配置:访问被拒绝错误(1045)
【发布时间】:2018-04-16 23:27:52
【问题描述】:

我在使用 Ubuntu 的 Hyper-V 虚拟机上遇到 mysql 问题。我正在使用的一些可能相关的规格:

PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) 
mysql  Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using  EditLine wrapper
Psy Shell v0.8.18 (PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 — cli)

我正在做一个练习项目,并且对编码非常陌生,所以我可能会遗漏一些对于非新手来说完全显而易见的东西。当我尝试时:

php artisan migrate

我收到以下错误:

In Connection.php line 664:

  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using pas  
  sword: YES) (SQL: select * from information_schema.tables where table_schem  
  a = mytestproject and table_name = migrations)                                     

In PDOConnection.php line 50:

  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using pas  
  sword: YES)                                                                  

In PDOConnection.php line 46:

  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using pas  
  sword: YES)  

我尝试如下设置我的 database.php、.env 文件:

.env 文件:

APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mytestproject
DB_USERNAME=root
DB_PASSWORD=password

REDIS_HOST=127.0.0.1
REDIS_PORT=6379

CACHE_DRIVER=redis
QUEUE_DRIVER=redis

database.php 文件:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'mytestproject'),
    'username' => env('DB_USERNAME', 'root'),
    'password' => env('DB_PASSWORD', 'mypassword'),
    'unix_socket' => env('DB_SOCKET', ' '),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

Mysql 用户:

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.06 sec)

在搜索这个错误的基础上,我看到很多解决方案表明.env文件和database.php文件需要正确配置,我尝试了。我尝试设置 root 用户权限,将 localhost 更改为 127.0.0.1 等。我已经尝试了我在各种留言板上建议的所有内容,但我相信我的设置可能有一些特别之处,或者我还没有检查以解决此错误并继续我的设置。任何帮助将不胜感激。

【问题讨论】:

  • 你能用mysql客户端连接数据库吗?
  • 你确定你的 .env 文件被加载了吗? env 不是一个 php 函数(也许你正在使用 CakePHP?)
  • 试试mysql> GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION;> FLUSH PRIVILEGES;
  • 是的,我正在连接。虽然从终端使用 mysql (mysql -u root -p)
  • 回复:.env 文件。如何检查它是否正在加载?

标签: php mysql ubuntu hyper-v


【解决方案1】:

你展示了:

在 .env 文件中:

DB_PASSWORD=password

在database.php中:

'password' => env('DB_PASSWORD', 'mypassword'),

那么正确的密码在哪里?

【讨论】:

  • 在 database.php 中,它应该是空白而不是 'mypassword' 还是应该是 .env 文件中的 'password'?实际密码是“mypassword”。
  • @A144 我不知道你的环境是怎么配置的,但不管怎样,如果是正确的密码,两个文件中都必须是“mypassword”
  • 在 database.php 和 .env 中都有“mypassword”是有意义的,但这不是不安全吗?我读到在 .env 文件中有实际密码是可以的,但我注意到人们在 database.php 文件中输入了“secret”或“”。我尝试了你的建议,它确实有效(谢谢!),但我想知道它是否不安全。
  • @A144 我不知道您尝试使用哪个框架。所以,如果你想在 github 上发布你的代码,例如,你希望 database.php 在那里,但没有你的密码 - 这样你就可以使用 dotenv loader,在其中指定实际凭据,而不是在database.php 你可以只使用env(‘DB_PASSWORD’, ‘secret’);,这意味着它首先会尝试从环境变量DB_PASSWORD 中获取密码,如果找不到,则使用'secret'。所以,期待你的 env-file 不起作用。你试过了吗 - github.com/vlucas/phpdotenv
猜你喜欢
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
相关资源
最近更新 更多