Laravel 5.3不会连接到mysql

时间:2016-09-13 20:28:31

标签: php mysql laravel

我在Macbook Air上创建了一个新用户(OS X版本10.11.2)。新用户具有完全管理员权限。我正在使用MAMP。 MySQL端口设置为3306.我可以用其他一切连接到MySQL。我的所有Laravel项目都停止连接到MySQL。当我尝试使用

php artisan migrate

我明白了:

[PDOException]                             
SQLSTATE[HY000] [2002] Connection refused  

这是我的.env的数据库部分:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=store
DB_USERNAME=clerk
DB_PASSWORD=inventory

我尝试过使用root用户和密码。我尝试过使用不同的端口。我尝试将主机切换到localhost。我已验证用户名和密码是否正确,以及用户是否可以访问数据库。 这是我的config / database.php文件的MySQL部分:

'mysql' => [
  'driver' => 'mysql',
  'host' => env('DB_HOST', '127.0.0.1'),
  'port' => env('DB_PORT', '3306'),
  'database' => env('DB_DATABASE', 'store'),
  'username' => env('DB_USERNAME', 'clerk'),
  'password' => env('DB_PASSWORD', 'inventory'),
  'charset' => 'utf8',
  'collation' => 'utf8_unicode_ci',
  'prefix' => '',
  'strict' => true,
  'engine' => null,
],

我一直在搜索,我似乎无法找到答案。我的旧Laravel 5.2项目也没有连接。我很确定这是由创建一个新用户引起的,但我不太了解MySQL以找出问题。

4 个答案:

答案 0 :(得分:0)

尝试更改db_host = localhost:3306

答案 1 :(得分:0)

您定义engine = null。据我所知,在编译创建查询时,引擎在MySqlGrammar.php内部使用。我只看过VIEWS的空引擎。

尝试以下配置:

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'store'),
    'username' => env('DB_USERNAME', 'clerk'),
    'password' => env('DB_PASSWORD', 'inventory'),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
],

你确实在你的问题中提到了它,并认为以下是终端的作品

mysql -uclerk -pinventory -h127.0.0.1 -P3306 store

可能需要

mysql -uclerk -pinventory -hlocalhost -P3306 store

您可以使用项目中的info.php文件检查其他内容,以便在将PDO作为模块引用时仔细检查所有内容是否正常。

<?php
phpinfo();

然后还可以使用一个小的PDO php脚本来查看你的连接是否正常工作。类似的东西:

<?php
$servername = "127.0.0.1";
$username = "clerk";
$password = "inventory";

try {
    $conn = new PDO("mysql:host=$servername;port=3306;dbname=store;", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

还可以在虚拟路线中检查env('DB_DATABASE')等给你的东西。

更新了要检查的内容2016.09.15

要确保env()正在获取包含以下路线的正确信息,然后包含以下内容的输出:

Route::get('dbtest', function () {
    $config = [
        'host' => env('DB_HOST'),
        'port' => env('DB_PORT'),
        'database' => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'password' => env('DB_PASSWORD'),
    ];
    dd($config);
});

然后还以root用户身份访问mysql并包含select语句的输出:

mysql> select host, user, password, authentication_string, password_expired from mysql.user;

当您使用MAMP时,请确保使用/Applications/MAMP/Library/bin/mysql

中的mysql命令行工具

答案 2 :(得分:0)

它已经解决了。经过几个小时拉出我的头发,我决定采取@nyedidikeke建议并重新安装mysql。我正在使用MAMP,我一直想停止使用它。我卸载了它,并通过Homebrew安装了mysql。一切都很好,谢谢你的帮助!

答案 3 :(得分:0)

按照我在您的问题下面的评论中建议的方式执行了故障排除流程,所有操作都应按预期进行。

如果情况不是这样,你必须遗漏一些东西; ......我认为是一个PATH问题。

我建议您export your database,卸载您的MySQL,然后在here下载一个新的。

按照详细说明here的方法进行可能的修复。

有了这个,你的挑战肯定会得到解决。