【问题标题】:Laravel + Vagrant = Access denied for user 'root'@'localhost'Laravel + Vagrant = 用户 'root'@'localhost' 的访问被拒绝
【发布时间】:2014-04-26 13:26:42
【问题描述】:

我已经看到 stackoverflow 上的许多用户都有类似的问题,但按照我的答案我无法使其正常工作。

当我跑步时:

php artisan migrate

我明白了:

[PDOException]                                                                         
SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: NO) 

这是我的 app/config/app.php

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'mio_sito',
            'username'  => 'root',
            'password'  => '',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

问题是我实际上没有密码,如果我用以下方式登录 vagrant:

vagrant ssh

我可以通过以下方式访问 mysql:

mysql -u root

并且不需要密码。
我该如何解决这个问题?

【问题讨论】:

  • 尝试添加 127.0.0.1 而不是 localhost ?
  • 默认 MySQL 安装通常只允许通过套接字连接进行无密码连接。 mysql -u root 可能正在使用套接字连接而不是 TCP 连接。当您指定127.0.0.1localhost 时,您实际上是通过TCP 连接的。很可能,问题出在 MySQL 配置中。
  • 如果您使用宅基地,请确保它是homestead'@'localhost' 而不是homestead'@'%'

标签: mysql vagrant


【解决方案1】:

根据 Laravel docs:

要通过 Navicat 或 Sequel Pro 从主机连接到 MySQL 或 Postgres 数据库,您应该连接到 127.0.0.1 和端口 33060 (MySQL) 或 54320 (Postgres)。 两个数据库的用户名和密码都是 homestead / secret。

我是如何测试它的(windows 7 x64 - git bash):

$ vagrant up
$ vagrant ssh
vagrant@homestead:~$ mysql -u root -p
vagrant@homestead:~$ 秘密
mysql>

【讨论】:

    【解决方案2】:

    我想你在 vagrant 之外使用了php artisan migrate 命令,这就是你得到这个错误的原因。

    使用vagrant ssh,移动到您的项目文件夹(例如cd /var/www/laravel-project)并使用php artisan migrate

    它应该可以工作。

    【讨论】:

      【解决方案3】:

      如果您位于项目的根目录中(我的项目名为 quickstart),您应该首先检查您的 .env 文件:

      nano .env
      

      这应该会显示如下内容:

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

      记下DB_DATABASEDB_USERNAMEDB_PASSWORD 的值,因为您稍后会用到它们。

      基于this website,然后您想要执行以下操作(请注意,您可能需要在前面添加sudo,或者如果您没有密码,您可以不包括-p

      mysql -u mysql_user -p
      

      然后会提示您输入密码(如果您没有密码,请按 Enter)。输入后按Enter

      你的下一步(现在你在 mysql 数据库中)是输入你在开始时创建的数据库名称,在我的例子中是homestead

      create database homestead;
      

      仔细检查您是否使用以下内容创建了数据库:

      show databases;
      

      现在创建一个用户(在我的例子中,用户实际上是与数据库名称相同的名称):

      create user homestead;
      

      现在您想使用您在顶部记下的密码(在我的情况下是 secret)。另外,将 db_namedb_userdb_password 替换为您在第一步中记下的值:

      grant all on db_name.* to 'db_user'@'localhost' identified by 'db_password';
      

      现在,当您运行 php artisan migrate 时,您有望得到 ​​p>

      Migration table created successfully.
      Migrated: 2014_10_12_000000_create_users_table
      Migrated: 2014_10_12_100000_create_password_resets_table
      

      【讨论】:

        【解决方案4】:

        由于您能够连接到 MySQL,只需为 root 设置密码并更新您的数据库凭据:

        mysql> update user set password=PASSWORD("mynewpass") where User='root';
        mysql> flush privileges;
        

        还要确保您的数据库凭据存在于app/config/database.php 而不是app.php

        【讨论】:

          猜你喜欢
          • 2015-07-04
          • 2013-07-28
          • 2023-03-20
          • 2017-10-04
          • 2019-06-05
          • 2013-08-22
          • 2017-03-14
          相关资源
          最近更新 更多