【问题标题】:Laravel 5.3 wont connect to mysqlLaravel 5.3 无法连接到 mysql
【发布时间】:2017-03-20 09:54:17
【问题描述】:

我在我的 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 用户和密码。我尝试过使用不同的端口。我尝试将主机切换到本地主机。我已验证用户名和密码正确,并且用户有权访问数据库。 这是我的 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 的了解还不够,无法找出问题所在。

【问题讨论】:

  • 您可以使用mysql 命令行工具或MySQL Workbench 程序或等效程序连接吗?您是否尝试过使用localhost 而不是127.0.0.1
  • @tadman |我在原帖中回答了这两个问题。
  • 连接被拒绝意味着mysql没有运行,或者没有监听。这意味着用户/通行证在此阶段无关紧要。你甚至没有连接到 mysql 来尝试并登录。如果这是一个权限问题,你会得到“拒绝访问”
  • 设置'strict' => false, 而不是'strict' => true, 并运行连接测试。此外,您的 default 连接字符串应设置为 MySQL,如:'default' => env('DB_CONNECTION', 'mysql') 在您的config/database.php 文件中。
  • 哇...进一步集思广益。

标签: php mysql laravel


【解决方案1】:

按照我在您问题下方的 cmets 中建议的故障排除流程进行操作后,一切都应该按预期工作。

如果不是这样,你一定是错过了什么; ...我认为是 PATH 问题。

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

按照here 中阐述的方法进行可能的修复。

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

【讨论】:

    【解决方案2】:

    尝试更改您的 db_host = localhost:3306

    【讨论】:

      【解决方案3】:

      您定义了一个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 命令行工具

      【讨论】:

      • 试过你的建议:mysql -uclerk -pinventory -hlocalhost -P3306 store 工作正常。 PDO 脚本也运行良好。
      • 如果 -hlocalhost 有效,那么您需要将 .env 文件中的 DB_HOST 从 127.0.0.1 更新为 localhost。我添加了另外两件事你可以检查。
      【解决方案4】:

      已经解决了。在拔掉头发几个小时后,我决定接受@nyedidikeke 的建议并重新安装mysql。我正在使用 MAMP,我一直想停止使用它一段时间。我卸载了它,并通过 Homebrew 安装了 mysql。一切正常,感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 2023-03-16
        • 2017-01-27
        • 1970-01-01
        • 2020-11-24
        • 2017-05-02
        • 2016-12-14
        相关资源
        最近更新 更多