Laravel + Vagrant =用户'root'@'localhost'拒绝访问

时间:2014-04-26 13:26:43

标签: mysql vagrant

我已经看到很多用户在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

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

4 个答案:

答案 0 :(得分:12)

根据Laravel docs

  

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

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

  

$ vagrant up    $ vagrant ssh
   vagrant @ homestead:〜$ mysql -u root -p
   vagrant @ homestead:〜$ secret
   MySQL的>

答案 1 :(得分:4)

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

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

它应该有效。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

如果您位于项目的根目录中(我的名字为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时,你希望得到

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