【问题标题】:Access denied for user 'homestead'@'localhost' (using password: YES)用户 'homestead'@'localhost' 的访问被拒绝(使用密码:YES)
【发布时间】:2015-06-27 16:03:17
【问题描述】:

我在使用 Laravel 5.0 的 Mac OS Yosemite 上。

在我的 本地 环境中,我运行 php artisan migrate 我不断得到:

用户 'homestead'@'localhost' 的访问被拒绝(使用密码:YES)

配置

这是我的 .env

APP_ENV=local
APP_DEBUG=true
APP_KEY=*****

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

app\config\database.php

   'mysql'       => [
    'driver'      => 'mysql',
    'host'        => env('DB_HOST', 'localhost'),
    'database'    => env('DB_DATABASE', 'homestead'),
    'username'    => env('DB_USERNAME', 'homestead'),
    'password'    => env('DB_PASSWORD', 'secret'),
    'unix_socket' => '/tmp/mysql.sock',
    'charset'     => 'utf8',
    'collation'   => 'utf8_unicode_ci',
    'prefix'      => '',
    'strict'      => false,
    ]

如何避免这种错误?

我试过了:


1

app/database.php

localhost 替换为127.0.0.1

'host'=> env('DB_HOST', 'localhost') -->'host' => env('DB_HOST', '127.0.0.1')

另外,在 .env

DB_HOST=localhost --> DB_HOST=127.0.0.1


2

尝试指定环境

php artisan migrate --env=local


3

通过run查看MySQL是否正在运行

mysqladmin -u homestead -p status Enter password: secret

我明白了

Uptime: 21281 Threads: 3 Questions: 274 Slow queries: 0 Opens: 327 Flush tables: 1 Open tables: 80 Queries per second avg: 0.012

这意味着它正在运行。


4

检查 MySQL UNIX Socket(这一步对我有用

【问题讨论】:

  • 最佳实践是确保该帐户实际存在于 mysql 中...“我在街上找到了这把钥匙,它在我的前门锁中不起作用。我该如何更改锁以使钥匙工作?”
  • 我认为您使用的是宅基地虚拟机?我发现它只有在你在虚拟机中时才会起作用。你可以通过 ssh vagrant@127.0.0.1 -p 2222 进入它。我的默认机器没有树枝说 db 正在运行。

标签: php laravel laravel-5 database-migration homestead


【解决方案1】:

就我而言,我没有使用该名称创建数据库。 尝试更改用户名、密码和数据库名称以适应您所拥有的或 访问:https://5balloons.info/fix-access-denied-for-user-homesteadlocalhost/

【讨论】:

    【解决方案2】:

    A.使用数据库设置更新 .env 文件后,通过“running php artisan config:clear”清除 laravel 设置

    B.请确保您重新启动您的 apache 服务器/重新运行“php artisan serve”命令以使您的设置生效。

    【讨论】:

      【解决方案3】:

      我的应用已设置为使用 .env.local。我一直在检查.env

      如果您有多个.env 文件,请检查您是否正在编辑正确的文件。

      【讨论】:

        【解决方案4】:

        从您的问题来看,您似乎正在经营宅基地。在这种情况下,请确保您在 VM 中运行命令。包括我在内的许多开发人员经常犯错误并在 VM 之外运行工匠命令,这些命令将尝试连接到可通过 localhost 访问的本地数据库,这与 homestead 使用的数据库不同。 cd 到你的 Homestead 目录并运行

        vagrant ssh
        

        然后 cd 进入代码,如果那是你保存项目的地方,然后 cd 进入你的项目并运行php artisan migrate again 我希望这对其他人有所帮助。

        【讨论】:

          【解决方案5】:

          在我的情况下(laravel 5+),我必须将密码用单引号括起来并清除配置缓存:

          DB_CONNECTION=mysql
          DB_HOST=localhost
          DB_PORT=3306
          DB_DATABASE=database_name
          DB_USERNAME=user_name
          DB_PASSWORD='password'
          

          然后运行:

          php artisan config:clear
          

          【讨论】:

          • 经过大量其他努力后,这个解决方案在 Laravel 8 中为我工作。谢谢。
          【解决方案6】:

          在我的情况下,错误是由我的 Homestead / Vagrant 配置“引起”的,我忘记了 :) 试图仅从命令行运行迁移。

          如果使用 Homestead Vagrant Box 环境,您应该从您的 Homestead 机器中运行迁移(在使用 ssh 连接到它之后:vagrant@192.168.10.10:22),然后访问权限将正常并允许迁移运行。

          【讨论】:

            【解决方案7】:

            只需在根文件夹的 .env 文件中更改这些内容即可。

            DB_DATABASE=your_db_name
            DB_USERNAME=your_db_user_name
            DB_PASSWORD='your_db_password'
            

            它对我有用。

            【讨论】:

              【解决方案8】:

              就我而言, 重新启动我的服务器后问题就消失了。

              退出/关闭“php artisan serve”命令

              重新运行命令“php artisan serve”命令

              【讨论】:

                【解决方案9】:

                您所要做的就是修改您的 .env 文件。

                DB_HOST=localhost
                DB_DATABASE=homestead
                DB_USERNAME=homestead
                DB_PASSWORD=secret
                

                DB_DATABASE前面写数据库名,DB_USERNAME前面用root

                【讨论】:

                  【解决方案10】:

                  配置数据库后重启:

                   php artisan serve
                  

                  如果在设置数据库配置之前服务处于活动状态。

                  【讨论】:

                    【解决方案11】:

                    Access denied for user 'homestead'@'localhost' laravel 5 错误的原因是 .env.php 文件的 caching-issue 导致 Laravel 5 在你的 .env 中使用基于环境的配置文件。

                    1。转到您的应用程序根目录并打开 .env 文件(在 ubuntu 中它可能是隐藏的,所以按 ctrl+h 显示隐藏文件,如果您在终端中,请输入: ls -a 显示隐藏文件)在您的编辑器中并更改数据库配置设置。然后保存你的 .env 文件

                    DB_HOST=localhost
                    DB_DATABASE=laravelu
                    DB_USERNAME=root
                    DB_PASSWORD=''
                    

                    2。然后重新启动您的 apache 服务器/网络服务器。并刷新你的页面,你就完成了

                    3。如果仍然出现问题,请尝试运行以下命令以清除旧的配置缓存文件。

                    php artisan config:clear
                    

                    现在你已经完成了错误

                    【讨论】:

                    • 感谢我为我工作,一个问题,为什么我们必须像在 database.php 文件中那样在 .env 文件中设置数据库详细信息
                    • 也许我需要多个环境、生产环境和本地环境。
                    • 一直在使用“php artisan serve”时一直在尝试重启Apache,我建议你不要犯和我一样的错误>
                    • 不起作用,现在我得到PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu' ._.
                    • 我尝试更改 .envconfig:clear cache:clear 所有命令,重新启动 apache 但仍然遇到同样的问题。
                    【解决方案12】:

                    检查你的 .env 文件,如果你修改了任何变量,请重启 laravel 服务器,你的问题就会解决

                    【讨论】:

                      【解决方案13】:

                      使用新配置更改 .env 后,您必须停止服务器并再次运行它(php artisan serve)。导致 laravel 在初始化服务器时获取环境。如果您不重新启动,您将更改 .env 并询问自己为什么没有发生更改!

                      【讨论】:

                        【解决方案14】:

                        在 Windows PC 中按照以下操作。


                        1. 访问应用程序的根文件夹。

                        2. 编辑 .env 文件

                        编辑突出显示并相应地更改用户名和密码以及数据库名称。

                        【讨论】:

                          【解决方案15】:

                          如果您返回 PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu' 之类的错误是由于您将 batabase 配置更改为 DB_DATABASE=laravelu。所以现在你要么:

                          1. 更改DB_DATABASE=[yourdatabase]
                          2. 在您的 phpmyadmin 中创建一个名为 laravelu 的数据库

                          这个应该可以解决

                          【讨论】:

                            【解决方案16】:

                            我在使用 SQLite 时遇到了同样的问题。我的问题是 DB_DATABASE 指向错误的文件位置。

                            使用touch命令创建sqlite文件,使用php artisan tinker输出文件路径。

                            $ touch database/database.sqlite
                            $ php artisan tinker
                            Psy Shell v0.8.0 (PHP 5.6.27 — cli) by Justin Hileman
                            >>> database_path(‘database.sqlite’)
                            => "/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite"
                            

                            然后将确切路径输出到 DB_DATABASE 变量。

                            DB_CONNECTION=sqlite
                            DB_HOST=127.0.0.1
                            DB_PORT=3306
                            DB_DATABASE=/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite
                            DB_USERNAME=homestead
                            DB_PASSWORD=secret
                            

                            如果没有正确的路径,您将收到拒绝访问错误

                            【讨论】:

                              【解决方案17】:

                              如果您使用的是 PHP 的默认 Web 服务器(例如 php artisan serve),您需要在更改 .env 文件值后重新启动服务器。

                              【讨论】:

                                【解决方案18】:

                                未来的某个时候。尝试先清除您的配置

                                php artisan config:clear. 
                                

                                关闭所有终端/cmd 窗口,然后重新启动终端/CMD,这应该可以消除错误消息。看看它是否有效。

                                【讨论】:

                                • 非常感谢这对我有用。我不知道为什么会发生这个错误。我只是关闭所有并重新加载并运行 php artisan config:clear
                                【解决方案19】:

                                TLDR:您需要停止服务器 Ctrl + c 并使用 php artisan serve

                                重新启动

                                详情:

                                如果你正在使用 Laravel,并且已经通过 php artisan serve 启动了本地开发服务器

                                在上面的服务器已经运行之后,您可以在 .env 文件中更改与数据库服务器相关的内容。就像从 MySQL 迁移到 SQLite 之类的。您需要确保停止上述过程,即Ctrcl C 或任何停止该过程的东西。然后再次重新启动 Artisan Serve,即 y php artisan serve 并刷新您的浏览器,您与数据库相关的问题将得到修复。这对我来说适用于 Laravel 5.3

                                【讨论】:

                                • 天哪,这对我有用,谢谢。但是当环境改变时我怎么能停下来有什么工具吗?这是很好的体验
                                【解决方案20】:

                                我也遇到了同样的问题,结果发现我只需要重启服务器再重新开始

                                Ctrl + c 然后

                                php artisan serve
                                

                                【讨论】:

                                  【解决方案21】:

                                  我已经找到解决办法了

                                  1. 转到您的应用程序根目录并在您的编辑器中打开 .env 文件(在 ubuntu 中可能是隐藏的,因此按 ctrl+h 显示隐藏文件)并更改数据库配置设置。然后保存你的 .env 文件

                                  2. 然后重新启动您的 apache 服务器/Web 服务器。并刷新你的页面,你就完成了

                                  3. 如果仍然出现问题,请尝试运行以下命令以清除旧的配置缓存文件。

                                  这对我有用 gl ...

                                  【讨论】:

                                    【解决方案22】:

                                    两种方法解决

                                    第一种方式(不推荐)

                                    打开您的数据库配置文件 (laravel_root/config/database.php) 并搜索以下代码块。

                                            'host'      => env('DB_HOST', 'localhost'),
                                            'database'  => env('DB_DATABASE', 'blog'),
                                            'username'  => env('DB_USERNAME', 'root'),
                                            'password'  => env('DB_PASSWORD', ''),
                                    

                                    如下修改代码块

                                            'host'      => 'yourHostName',
                                            'database'  => 'YourDatabastName',
                                            'username'  => 'YoutDatabaseUsername',
                                            'password'  => 'YourDatabasePassword',
                                    

                                    第二种方式(Laravel 推荐)

                                    检查你的 Laravel 根目录有一个文件调用 .env 如果不存在,查找 .env.example,复制/重命名为 .env 之后文件看起来很糟糕!

                                    APP_ENV=local
                                    APP_DEBUG=true
                                    APP_KEY=someRandomNumber
                                    
                                    DB_HOST=localhost
                                    DB_DATABASE=homestead
                                    DB_USERNAME=homestead
                                    DB_PASSWORD=secret
                                    
                                    CACHE_DRIVER=file
                                    SESSION_DRIVER=file
                                    QUEUE_DRIVER=sync
                                    
                                    MAIL_DRIVER=smtp
                                    MAIL_HOST=mailtrap.io
                                    MAIL_PORT=2525
                                    MAIL_USERNAME=null
                                    MAIL_PASSWORD=null
                                    

                                    将下面的块修改如下

                                    DB_HOST=yourHostName
                                    DB_DATABASE=yourDatabaseName
                                    DB_USERNAME=yourDatabaseUsername
                                    DB_PASSWORD=youPassword
                                    

                                    现在它可以正常工作了。

                                    【讨论】:

                                    • 这个文件有什么意义? root/config/database.php 中的这些信息似乎是多余的。
                                    • 信息不是多余的,它使用 env 函数从 .env 文件中读取值来保护服务器信息。
                                    • 如何使用 Homestead 查找或创建主机名、数据库名、用户名和密码?
                                    【解决方案23】:

                                    检查根文件夹中的“.env”文件。对吗?

                                    DB_CONNECTION=mysql
                                    DB_HOST=127.0.0.1
                                    DB_PORT=3306
                                    DB_DATABASE=homestead
                                    DB_USERNAME=homestead
                                    DB_PASSWORD=secret
                                    

                                    【讨论】:

                                      【解决方案24】:

                                      如果您使用 php artisan migrate 不是来自 vagrant 框,而是来自主机,那么您必须在 .env 中定义框 192.168.10.10 的 ip

                                      并且显然从您的 ip 为宅基地用户设置了权限 像

                                      grant all privileges on *.* to 'homestead'@% identified by 'secret';
                                      

                                      .env 文件中

                                      DB_HOST=192.168.10.10
                                      DB_DATABASE=homestead
                                      DB_USERNAME=homestead
                                      

                                      【讨论】:

                                      • 我无法让它工作,但 grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret'; 为我工作。
                                      【解决方案25】:

                                      知道了!以 root 身份登录并授予 homestead@localhost 对所有内容的权限。

                                      从您的终端:

                                      $ homestead ssh
                                      
                                      $ mysql -u root -p
                                      
                                      Enter password: secret
                                      
                                      mysql> grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';
                                      
                                      Query OK, 0 rows affected (0.00 sec)
                                      exit
                                      

                                      现在 homesteads 普通用户可以访问您的所有表,因此应该能够运行迁移等操作。

                                      【讨论】:

                                        【解决方案26】:

                                        我使用 laravel 5.* 我想我在项目的根目录中有一个文件调用 .env,看起来像这样:

                                        APP_ENV=local
                                        APP_DEBUG=true
                                        APP_KEY=SomeRandomString
                                        
                                        DB_HOST=localhost
                                        DB_DATABASE=homestead
                                        DB_USERNAME=homestead
                                        DB_PASSWORD=secret
                                        
                                        CACHE_DRIVER=file
                                        SESSION_DRIVER=file
                                        QUEUE_DRIVER=sync
                                        
                                        MAIL_DRIVER=smtp
                                        MAIL_HOST=mailtrap.io
                                        MAIL_PORT=2525
                                        MAIL_USERNAME=null
                                        MAIL_PASSWORD=null
                                        MAIL_ENCRYPTION=null
                                        

                                        这已经结束了 bd 配置的编写,因此您可以删除这些配置变量,以便 laravel 在 /config 下进行配置或在此处设置您的配置。

                                        我做了第二个,它对我有用:)

                                        【讨论】:

                                          【解决方案27】:

                                          我只是想发布这个,因为这个问题今天让我沮丧了大约 3 个小时。我没有尝试过其他答案中列出的任何方法,尽管它们看起来都很合理。事实上,我正准备尝试通过上述每个建议的解决方案,但不知何故,我得到了这个灵感。这是让我重新开始工作的方法——YMMV:

                                          1) 找到您的 .env 文件。 2) 将您的 .env 文件重命名为其他名称。 Laravel 5 必须将此文件用作框架中其他位置的设置的覆盖。我将我的重命名为 .env.old 3) 您可能需要重新启动您的网络服务器,但我不必这样做。

                                          祝你好运!

                                          【讨论】:

                                            【解决方案28】:

                                            检查 MySQL UNIX 套接字

                                            使用 MySQL 查找 unix_socket 位置

                                            mysql -u homestead -p

                                            mysql> show variables like '%sock%';
                                            +-----------------------------------------+-----------------------------+
                                            | Variable_name                           | Value                       |
                                            +-----------------------------------------+-----------------------------+
                                            | performance_schema_max_socket_classes   | 10                          |
                                            | performance_schema_max_socket_instances | 322                         |
                                            | socket                                  | /var/run/mysqld/mysqld.sock |
                                            +-----------------------------------------+-----------------------------+
                                            3 rows in set (0.00 sec)
                                            

                                            然后我去config/database.php

                                            我更新了这一行:'unix_socket' => '/tmp/mysql.sock',

                                            收件人:'unix_socket' => '/var/run/mysqld/mysqld.sock',

                                            就是这样。它适用于我的第四次尝试。我希望这些步骤对某人有所帮助。 :D

                                            【讨论】:

                                            • 哇,这救了我:)
                                            【解决方案29】:

                                            当你安装 Homestead 时,这会创建一个默认的“homestead” VM 中的数据库。您应该通过 SSH 连接到 VM homestead ssh 并运行 你从那里迁移。如果您在没有虚拟机的情况下在本地工作, 您需要手动创建数据库。默认情况下,数据库 应该叫homestead,用户名是homestead,密码是 是秘密的。

                                            查看thread on laracastsblog post 了解更多详情


                                            如果你得到了

                                            [PDOException] SQLSTATE[HY000] [2002] No such file or directory
                                            

                                            尝试将 /app/config/database.php 文件中的 "host" 从 "localhost" 更改为 "127.0.0.1" 。您可以在此thread 上找到更多详细信息和其他修复。

                                            还要检查您是否指定了正确的 unix_socket 。检查这个thread

                                            【讨论】:

                                            • @rangerover.js 尝试将 /app/config/database.php 文件中的“host”从“localhost”更改为“127.0.0.1”
                                            • @rangerover.js 检查这个线程 stackoverflow.com/questions/20723803/… 。查看任何重要的解决方案。
                                            • @rangerover.js 也检查mysql服务是否正在运行:)
                                            • @rangerover.js 可以检查你的 unix_socket 吗? stackoverflow.com/a/25649930/939299
                                            • 终于在第4次尝试了。请删除您所有的 cmets,并将此链接 stackoverflow.com/a/25649930/939299 包含在您的答案中,因为它对我有帮助。
                                            【解决方案30】:

                                            登录 MYSQL - 使用 mysql 数据库。

                                            从用户中选择 *;

                                            确保您的 HOST 列正确。它应该是您要连接的主机(您的应用程序服务器),无论是 IP 地址还是 DNS 名称。 '%' 也可以工作(表示通配符),但不安全。

                                            【讨论】:

                                              猜你喜欢
                                              • 2019-01-23
                                              • 2016-12-16
                                              • 2017-08-10
                                              • 2019-07-23
                                              • 2016-09-01
                                              • 1970-01-01
                                              • 2023-03-08
                                              • 2017-08-08
                                              • 2013-05-07
                                              相关资源
                                              最近更新 更多